PHP7 有两种自动加载方式:__autoload
和 spl_autoload_register()
__autoload
已经于 7.2 废弃,不在阐述
spl_autoload_register
spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] ) : bool
composer 的自动加载原理就是通过 spl_autoload_register()
实现的
优势:
- 可以按需多次注册加载函数,
__aotuload
由于是全局函数只能定义一次,不够灵活 - 可以设置优先级
- 可以被catch到错误,
__aotuload
不能 - 注册的加载函数可以按需被
spl_autoload_unregister
掉
简单实现
classes/A.php
class A
{
public function __construct()
{
echo "1\n";
}
public function aa()
{
echo "aa\n";
}
public static function bb()
{
echo "bb\n";
}
}
autoload.php
spl_autoload_register(function($class) {
require 'classes/'.$class.'.php';
});
$a = new A();
$a->aa();
$a::bb();
/* 输出结果:
1
aa
bb
*/
网友评论