紫郢青索

知之者不如好之者,好之者不如乐之者

用户工具

站点工具


PHP类的自动加载

我们通常在面向对象的编程中,为每一个类创建一个PHP文件。这样就会在每个文件头部出现好多的include代码。

在 PHP 5 中,可以使用spl_autoload_register()注册自动加载器。 当使用尚未被定义的类(class)和接口(interface)时自动去加载。通过注册自动加载器,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。

举个例子: 工作目录下创建目录 foo/bar/ 在该目录下创建类文件 Test.php

Test.php
<?php
namespace foo\bar;
 
class Test{
    public function hello(){
        echo "hello";
    }
}

工作目录的根目录创建调用文件 demo.php

demo.php
<?php
// 注册自动加载方法,使用匿名方法
spl_autoload_register(function($class){
    $file = str_replace('\\', '/', $class) . '.php';
    if (file_exists($file)) {
        require $file;
        return true;
    }
    return false;
});
// 引用要调用的类
use foo\bar\Test;
$bar = new Test();
$bar->hello();
?>

执行:

php ./demo.php
 
#结果
hello

执行过程: use foo\bar\Test; $bar = new Test();

执行这两句创建类的实例,但是发现类没有定义,就会使用注册的自动加载方法,去加载类文件。 就是执行注册的匿名函数,参数 $class = 'foo\bar\Test';