当两个 class
类分别对应两个脚本文件的时候,双方都不能在自己的文件中随意的调用另一个类,需要通过 include
或是 require
引入后才实例化。
但如果一个脚本文件中引入了太多的脚本之后,又会显得有点笨重了。
因此PHP提供了类的自动加载技术,原理是当你在实例化的时候,如果没有前置引入,那么本来PHP会立即报错并同时提示找不到这个 class
类的,但现在提供了一个机会,它会在当前环境中查找你是否有对spl_autoload_register
等函数进行过处理,如果有的话,先将类名等信息丢过去看看,如果成功处理了这个错误的话,则相安无事,否则就报错。
// 类的自动加载
spl_autoload_register(function($className){
// 路径分隔符,也就是 /
$opt = DIRECTORY_SEPARATOR;
// 完整路径
$path = __DIR__.$opt.'vendor'.$opt.'demo'.$opt.strtolower($className).".class.php";
// 输出路径
echo "<p>$path</p>";
// 引入文件
require_once($path);
});
// 实例化
$date = new Date();
// 打印属性
var_dump($date);
// 实例化
$math = new Math();
// 打印属性
var_dump($math);
spl_autoload_register()
函数的参数是一个回调函数,在这个回调函数中能获得 你未经引用而直接调用的类名,再根据这个类名找到它对应的路径,使用require
引入,就能解决类名找不到的异常错误了。
更多相关内容可以查看官方提供的 SPL 标准库
网友评论