PHP自动加载原理

张锋 4年前 访问:704 评论:0 关注:0

当PHP new一个未定义的类时,如果该类文件没有引入或定义,则会报错:

Fatal error: Uncaught Error: Class 'xxx' not found in...

自PHP5.1起,可以通过spl_autoload_register函数实现类的自动加载,该函数第一个参数就是未定义类的类名。当new一个未定义的类时,如果该类文件没有引入或定义,如果文件中声明了spl_autoload_register函数,则会把类名作为参数传入该函数。用户就可以根据传入的参数,require或include指定的类文件,实现自动加载。

例如有一个类文件class1.php,代码如下:

<?php
class Class1
{
    public function __construct()
{
        echo "class1 is build\n";
    }
}

然后在class1.php的同级目录下,新建一个index.php,代码如下:

<?php
$c = new Class1();

如果没有require class1.php,直接new class1的话会报错。下面修改index.php代码:

<?php
function myLoader($className)
{
    echo "class:{$className} is not find\r\n";
    require $className.'.php';
}
spl_autoload_register('myLoader');
$c = new Class1();

然后运行index.php,

现在程序可以正常运行了。
同时,也可以创建一个自动加载的类来处理。
修改index.php代码如下:

<?php
class MyAutoLoader
{
    public static function getLoader($className)
{
        echo "class:{$className} is not find\r\n";
        require $className.'.php';
    }
}
//第一种写法
//spl_autoload_register('MyAutoLoader::getLoader');
//第二种写法
$loader = new MyAutoLoader();
spl_autoload_register(array($loader,'getLoader'));
$c = new Class1();
评论

还没有人评论 ~

❤❤❤❤❤❤
心情
此图名叫《暗淡蓝点》
1990年2月14日,由旅行者1号拍摄,
蓝色的点就是地球
或许你看不清,因为地球在宇宙中太小了。