2012-07-11 86 views
1

我有我自己的lib文件夾「classes」。我試圖使用Zend庫作爲獨立。 (將他們的類整合到我的應用程序中)。Zend Library與我自己的庫衝突

E.g.如下。 Zend類的所有名爲Zend的

類/ db.class.php

類/的Zend/translate.php文件夾下把....

我使用一個自動加載函數加載以前的課程。

if (!function_exists ("__autoload")){ 
function __autoload($class_name) 
{ 

    if(file_exists(ABSPATH.'/classes/'.$class_name.'.class.php')){ 
     require_once ABSPATH.'/classes/'.$class_name.'.class.php'; 
    } 

} 
} 

我的功能檢查,如果我的應用程序需要我的課,如果是的話,我會從我的「類」文件夾中加載它,如果不是會從Zend的文件夾中加載。

每當我打電話

require_once ABSPATH.'/classes/Zend/Loader/Autoloader.php'; 
$loader = Zend_Loader_Autoloader::getInstance(); 

它一直說,我的「自己的」類未加載。我認爲這是Zend auto load的問題,它檢查並發現它需要在zend文件夾中使用db.class.php。

我如何做到這一點,因爲我去Zend和我自己之間分開圖書館。

+0

我想用的Zend自動加載,因爲它使事情變得容易得多,我不需要再擔心需要哪一類。 – Slay 2012-07-11 19:04:53

回答

2

魔術__autoload函數不支持多個自動加載器。如果您如上所示指定自定義自動加載器,然後註冊Zend自動加載器,則以前安裝的自動加載器將被Zend自動加載器覆蓋。由於Zend組件使用了spl_autoload_register(),因此您也可以使用此方法(支持多個自動加載器 - 它基本上安裝一個自動加載器來處理另一個(用戶定義的)自動加載器堆棧)。

http://php.net/manual/function.spl-autoload-register.php

// Example (requires PHP >= 5.3 because of the anonymous function) 
spl_autoload_register(function($className) { 
    $fileName = ABSPATH .'/classes/'. $className .'.class.php'; 
    if (is_readable($fileName)) { 
     require_once($fileName); 
    } 
}); 
+0

嗨,那麼spl_autoload_register()所做的是它支持多個自動加載,以便在覆蓋我以前的自動加載器時使用zend自動加載器?我對嗎? – Slay 2012-07-11 19:23:27

+0

是的 - 您只能使用特殊名稱__autoload定義一個函數,這樣就無法以這種方式定義兩個自動加載器。 'spl_autoload_register'幾乎保留了所有應該被認爲是自動加載器的註冊函數的列表,並且在需要自動加載的時候調用它們,但是副作用是你不能再使用__autoload了。 – Niko 2012-07-11 19:29:02

+0

謝謝你的明確解釋和幫助。非常感謝。 – Slay 2012-07-11 19:43:24