美文网首页
源码阅读-ThinkPHP-附录A-自动加载函数解析

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

作者: 苏近之2017 | 来源:发表于2017-06-06 16:36 被阅读0次

    __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();

    相关文章

      网友评论

          本文标题:源码阅读-ThinkPHP-附录A-自动加载函数解析

          本文链接:https://www.haomeiwen.com/subject/zhfnfxtx.html