源码阅读-ThinkPHP-附录A-自动加载函数解析

2017-06-06  本文已影响0人  苏近之2017

__autoload 函数

这是 PHP 的魔法函数,会在实例化的类不存在的时候,自动调用。

function __autoload($clazz){
    echo '您调用的类' . $clazz . '不存在!'
    // TODO 引入不存在的类
}
$userModel = new User();

这段代码将会输出:

您调用的类User不存在!

这么做的好处是什么呢?

如果不这么做会怎么样呢?

不怎么做的话,我们代码可能会像下面这样子:

include 'xxx1.php';
include 'xxx2.php';
include 'xxx3.php';
include ...

这样的代码不方便维护,不灵活。如果使用自动加载,那么将省去很多麻烦,遇到不存在的类自动加载就好了。

升级版 __autoload 函数

这个升级版的名字叫做spl_autoload_register。下面是示例。

function autoload_func($clazz){
    echo '您实例化的类' . $clazz . '不存在';
    // TODO 引入不存的类
}

spl_autoload_register('autoload_func');
$userModel = new User();

输出的结果和上面是一样的,好处在于可以自己定义这个函数,但是不会自动触发。

也可以使用类的静态方法。

class Load{
    static function autoload_func(){
        echo '执行';
        // 做你应该做的事情
    }
}
spl_autoload_register('Load::autoload_func');
// 等同于上面的写法
//spl_autoload_register(array('Load','autoload_func'));
$userModel = new User();
上一篇下一篇

猜你喜欢

热点阅读