如何有效地替换Zend_Loader_Autoloader?

时间:2012-01-02 11:45:18

标签: php autoload zend-autoloader

由于性能问题(基准测试),我正在尝试使用另一个自动加载器,而不是默认的Zend_Loader_Autoloader。

我尝试了不同的方法,使用:

$autoloader->removeAutoloader(array('Zend_Loader_Autoloader', 'autoload'))
    ->setDefaultAutoloader(array($loader, 'loadClass'));

由于Autoloader与Zend Framework的大多数组件密切相关,因此我无法“删除它”。

我做了一个Xdebug一步一步的调试,它看起来像Autoloader这样工作:

1)getInstance 2)检查被调用的类根是否是已知的命名空间,以及其命名空间是否存在自动加载器 3)将非命名空间自动加载器放在堆栈上 4)在每个自动加载器上尝试自动加载器,直到找到有效的自动加载器。

但是,在我的情况下,我的自动加载器已经这样做了(我正在使用带有classMap策略的Opl Autoloader),我已经用各自的路径注册了namspace。

所以它对我来说看起来有点开销,因为我希望我的自动加载器能够在查找过程中使用绕过所有Zend检查。

你有什么改进的想法吗?我怎样才能在Zend Framework项目中有效地使用自定义(和高性能)自动加载器并使用Zend_Loader_Autoloader

2 个答案:

答案 0 :(得分:1)

自动加载器没有“严重关联”。您可以随时使用您喜欢的每个PSR-0投诉自动加载器,但在这种情况下,您不应使用Zend_Loader_Autoloader将自动加载器注册到Zend_Loader_Autoloader以替换Zend_Loader_Autoloader;)

spl_autoload_register($myAutoload);

答案 1 :(得分:1)

虽然不能单独回答Zend领导的这篇文章,Mathew,可能证明有助于演示如何放入替代自动加载器(以及更高效的自动加载器)

http://mwop.net/blog/262-Backported-ZF2-Autoloaders