PHP中的自动加载函数spl_autoload_register以及__autoload
__autoload:
__autoload — 尝试加载未定义的类(该魔术方法已自 PHP 7.2.0 起被废弃,并自 PHP 8.0.0 起被移除。 强烈建议不要依赖本函数。)由于该魔术方法已被spl_autoload_register替代就不过多赘述,功能参考spl_autoload_register函数。
spl_autoload_register:
PHP: spl_autoload_register - Manual 当实例化一个类的时候如果找不到该类则会执行这个方法。
b.php
<?php spl_autoload_register(function ($class) { require_once $class . '.php'; }); class b { public function b2(){ $a = new a; $a->a2(); echo 'b'; } } $c = new b(); $c->b2();
该文件中实例化了a使用的就是spl_autoload_register自动加载了a类,当找不到a类的时候则会运行spl_autoload_register方法里面的require引入a文件。
a.php
<?php class a { public function a2() { echo 'a'; } }
总结:spl_autoload_register以及__autoload都是当要实例化的类不存在的时候自动调用的函数,只不过魔法函数__autoload在PHP7.2版本之后就被废弃了。spl_autoload_register函数是框架的核心函数,可以实现所谓的惰性加载,通常配合namespace(命名空间)进行使用。