首先 new一个类的时候会触发以下系统函数调用。
function instance($className)
{
// 如果类存在则返回其实例
if (class_exists($className, false)) {
return new $className();
}
// 查看 autoload 函数是否被用户定义
if (function_exists('__autoload')) {
__autoload($className); // 最后一次引入的机会
}
// 再次检查类是否存在
if (class_exists($className, false)) {
return new $className();
} else {
// 不存在,抛出异常
throw new Exception('Class '.$className.' Not Found');
}
}
首先介绍参数$className的值。
1:new app\backend\Goods(); $className = 'app\backend\Goods';
2: use app\backend\Goods; new Goods(); $className = 'app\backend\Goods';
理解这些就可以设计一个简单的根据命名空间来加载类的自动加载函数
function __autoload($className)
{
//为了兼容windows和linux的路径分割符
$className = str_replace('\\', '/', $className);
// 根据类名确定文件名
$file = $className . '.php';
// 引入PHP文件
if (file_exists($file)) {
include $file;
}
}
当然命名空间也要符合规范(路径目录名+类名(类名和文件名一致))
结尾分享一款磁力搜索神器,wx小程序搜索磁力种子王,海量资源,真的好用!