我已经决定重写当前存在于项目中的自动加载器,用spl_autoload_register()替换旧的__autoload()。在寻找最佳解决方案时,我发现了php.net上最受欢迎的评论,其中指出:
对于具有命名空间类的PHP 5.3用户来说是个好消息:
当您创建一个与该命名空间相匹配的子文件夹结构时 包含类,您甚至不必定义自动加载器。
所以基本的实现很简单:
class Autoloader
{
function __construct() {
spl_autoload_extensions('.php');
spl_autoload_register();
}
}
添加具有相同命名空间的子文件夹可以最大限度地减少启动操作的数量:
require('bone/classes/autoloader.php');
$autoloader = new bone\classes\Autoloader;
#Start working with classes...
$custom_class = new meat\classes\Custom_class;
虽然这看起来小而快,但问题是:
这个解决方案将来会出现什么大问题?因为,例如,Zend / Symphony加载器要复杂得多,我相信这是有充分理由的。
(例如,在命名空间中添加"供应商"前缀 - 根据PSR-0 - 可能有点问题,因为它也应该与目录匹配 - 一个webroot目录)
希望得到任何建设性的观点。谢谢。