博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

PHP autoload机制(lazy loading)

Posted on 2012-10-12 22:47  bug yang  阅读(346)  评论(0编辑  收藏  举报

转载:http://www.cnblogs.com/hi-bazinga/archive/2012/05/14/2499756.html

 

在使用PHP进行开发时,开发者往往将一个类存放在单独的一个文件中,便于使用和管理。

但是在PHP5之前,每次使用一个类时,需要先将该文件include或require进来,如果需要使用的类数量很多,那么需要写很多include或require语句,既麻烦又不便于维护。好在PHP5提供了一种lazy loading的机制,即autoload。

 

PHP5之前如果要使用class A:

require ('A.php');
$a = A();

PHP5中在试图使用未定义的类时会自动调用__autoload函数,可以通过编写__autoload函数让php自动加载类,而不必写一个长长的包含文件列表。

复制代码
function __autoload($class)  
{  
    $file = $class . '.php'; 
 
    if (is_file($file)) {  
        require_once($file);  
    }  
}  

$a = new A();
复制代码

当然,我们可以自定义__autoload加载类的规则。

此外,假如我们不想自动加载的时候调用__autoload,而是调用我们自己的函数(或者类方法),我们可以使用spl_autoload_register来注册我们自己的autoload函数。

复制代码
function loader($class)  
{  
    $file = $class . '.php';  
    if (is_file($file)) {  
         require_once($file);  
    }  
}  

spl_autoload_register('loader');  
$a = new A();
复制代码

类方法:

复制代码
class Loader  
{  
   public static function loadClass($class)  
   {  
       $file = $class . '.php';  
       if (is_file($file)) {  
          require_once($file);  
       }  
   }  
}  

spl_autoload_register(array('Loader', 'loadClass'));  
$a = new A();
复制代码