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

__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();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在PHP开发过程中,如果希望从外部引入一个class,通常会使用include和require方法,去把定义这...
    四月不见阅读 4,716评论 0 0
  • 自动加载函数--__autoload() 在Yii中有spl_autoload_register() 这个自动加载...
    洞房花猪阅读 4,935评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,901评论 25 709
  • 一 预定义接口 1.1 遍历 Traversable(遍历)接口 检测一个类是否可以被foreach遍历,该接口不...
    coderhu阅读 4,949评论 0 0
  • “小辉从上海回来了?真的?太好了!你见多吃广,你定地方好了,哪里呀?武大珈园小观园,回我们母校了哈,嗯,好的好的,...
    一坨熊孩子阅读 2,755评论 0 3

友情链接更多精彩内容