2012-01-02 47 views
0

由於性能問題(基準測試)我試圖使用另一個自動加載器比默認的Zend_Loader_Autoloader。如何有效地替換Zend_Loader_Autoloader?

我嘗試不同的方法,使用:

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

由於磁帶自動加載機在很大程度上鍊接到Zend框架的最分量,我不能「刪除」。

我做了一個Xdebug的分步調試,它看起來像磁帶自動加載機的工作原理是這樣的:

1)的getInstance 2)檢查類被稱爲根是一個已知的命名空間,如果存在命名空間自動加載磁帶機 3)放入非名稱空間自動加載器 4)嘗試每個自動加載器上的自動加載器,直到找到有效的自動加載器。

然而,在我的情況,我的自動加載已經做到這一點(我使用OPL自動裝載機,類映射策略),我媒體鏈接註冊各自的路徑namspace。

所以它看起來有點開銷,對我來說,因爲我想我的自動加載在查找繞過所有的Zend檢查的非常乞討使用。

你有什麼想法改善嗎?我怎麼能有效地使用Zend框架項目中的自定義(和高性能)自動加載並使用Zend_Loader_Autoloader

+0

@mario,這是我真正做,OPL提供ClassMapLoader及其類映射建設者它會生成一個像「ar」這樣的數組ray('My_Class_Name'=>'My/Class/Name.php');這很簡單 – Trent 2012-01-02 13:34:26

回答

1

自動加載磁帶機是不是「重聯」。您可以隨時使用你喜歡的每一個PSR-0投訴自動加載磁帶機,但在這種情況下,你不應該使用Zend_Loader_Autoloader註冊自動加載到Zend_Loader_Autoloader更換Zend_Loader_Autoloader;)

spl_autoload_register($myAutoload); 
+0

ZF與Zend_Loader&Zend_Loader_Autoloader鏈接,一些類(IE Zend_Mail)使用Zend_Loader :: loadClass()方法,實際上使用Zend_Loader_Autoloader,據我所知Zend_Loader_Autoloader只是spl_autoloader_register的包裝,但由於它傾向於在使用Zend_Application(需要** Zend_Loader_Autoloader)時自動註冊自身。但是,如果我在所有ZF引導之前提前註冊,我是否認爲可以進入自動加載器堆棧的頂部?我的目標是永遠不要使用ZF自動裝載機,除非作爲後備。 – Trent 2012-01-02 13:37:44

+0

沒有注意到,有些組件直接調用'loadClass()'...是的,你可以用'spl_autoload_register()'註冊儘可能多的自動加載器,只要類存在,PHP將打開自動加載鏈,意思是:如果你的加載器加載了這個類,那麼不會調用另外的加載器。 – KingCrunch 2012-01-02 13:48:02

+0

好的,我會試試看。 (看看庫/ Zend/Mail/Transport/Smtp.php:Zend_Loader :: loadClass($ connectionClass);) – Trent 2012-01-02 13:59:46

相關問題