序言
当工程级别的代码需要引入很多外部文件时,会导致在类文件的头部书写很多类似下面的代码:
require_once __DIR__.'/'.$class.'.php';
这种情况下我们可以使用__autoload()函数来实现类的自动加载,但是由于函数重名的问题,PHP 官方目前推荐使用spl_autoload_register()函数来替代__autoload()函数,因为我们可以自己定义自动加载类的函数的名称,然后在spl_autoload_register()函数中实现这些类的调用。
代码演示
定义两个测试类Test1.php和Test2.php以及一个测试入口类Test.php
Test1.php
<?php
class Test1{
static function test(){
echo __METHOD__."\n";
}
}
Test2.php
<?php
class Test2{
static function test(){
echo __METHOD__."\n";
}
}
测试入口类
<?php
spl_autoload_register('autoload1');
Test1::test();
Test2::test();
function autoload1($class){
require_once __DIR__.'/'.$class.'.php';
}
可以看到我们在入口类中自定义了一个类的自动加载函数autoload1() 然后在spl_autoload_register()函数中去声明了自动加载函数的调用。
运行结果
/usr/bin/php /Users/yang/PHPCode/Test.php
Test1::test
Test2::test
Process finished with exit code 0
可以看到不同的类中的方法已经成功调用,并且程序没有报错。