【发布时间】:2012-01-02 11:45:17
【问题描述】:
由于性能问题(基准测试),我正在尝试使用除默认 Zend_Loader_Autoloader 之外的另一个自动加载器。
我尝试了不同的方法,使用:
$autoloader->removeAutoloader(array('Zend_Loader_Autoloader', 'autoload'))
->setDefaultAutoloader(array($loader, 'loadClass'));
由于自动加载器与 Zend 框架的大多数组件密切相关,我无法“删除它”。
我做了一个 Xdebug 一步一步调试,看起来 Autoloader 是这样工作的:
1) 获取实例 2) 检查被调用的类根是否是已知的命名空间以及其命名空间是否存在自动加载器 3) 将非命名空间的自动加载器放入堆栈 4) 在每个自动加载器上尝试自动加载器,直到找到一个有效的。
但是,就我而言,我的自动加载器已经这样做了(我正在使用带有 classMap 策略的 Opl Autoloader),我已经用它们各自的路径注册了 namspace。
所以这对我来说看起来有点开销,因为我希望在绕过所有 Zend 检查的查找的最开始时使用我的自动加载器。
您对改进有什么想法吗?我如何在 Zend Framework 项目中有效地使用自定义(和高性能)自动加载器并使用 Zend_Loader_Autoloader
【问题讨论】:
-
@mario,这就是我实际所做的,OPL 提供了一个 ClassMapLoader 及其 classMap 构建器,它生成一个像 "array('My_Class_Name' => 'My/Class/Name.php'); 这样的数组很简单
标签: php autoload zend-autoloader