php类文件的自动加载机制__autoload,spl

面向对象开发推荐一个类一个php文件,这样在调用时会出现要包括较多的文件。在复杂的项目中经常会出现重复包括等问题。其实php内置有几种方法来自动根据需要加载相应的类库。

1、__autoload函数

php5中引入__autoload函数,会在试图使用尚未被定义的类时自动调用。在__autoload加载指定的类


function __autoload($class_name) {
    require_once $class_name . '.php';
}

$a= new MyClass();
$a->callname(); 

如上所示,当实例化MyClass时会自动调用__autoload,并传入类名参数,即MyClass。在__autoload加载文件。实现自动加载文件。但是__autoload有一个缺点。那就是同时只能有一个函数。否则报错


2、spl_autoload函数

set_include_path("/home/www/"); //这里需要将路径放入include 
spl_autoload("MyClass"); //寻找/home/www/MyClass.php 
$a = new MyClass(); 
$a->callname();

spl_autoload是__autoload函数的系统实现。在调用未定义的类之前,调用spl_autoload('class'),系统会从默认的include_path中寻找类class,并尝试加载。本函数要求类文件在同目录。或者使用set_include_path设置类目录。且在调用之前必须调用spl_autoload。因此不太方便。

3、spl_autoload_register函数(推荐)



function load_class($class){
        require_once("/home/www/{$class}.php");
}
spl_autoload_register('load_class'); 
$a = new MyClass(); 
$a->callname();


spl_autoload_register将注册一个函数到__autoload函数栈,并覆盖__autoload函数。使用方法同__autoload一样,而且可以同时有多个存在。

 

你可能感兴趣的:(php)