2011-05-28 14 views
0

我想爲zend項目實現自定義的異常類。 我使用模塊,我所有的課程都在library之下。 這樣一個文件名DuplicateFileException.php這是 APPLICATION_PATH "/../library/Abra/Exception"下包含如何在一個文件中哄騙Zend加載器的多個類

class Abra_Exception_FileNotFoundExcpetion extends Exception {} 
class Abra_Exception_MissingFileException extends Exception {} 
class Abra_Exception_DuplicateFileException extends Exception {} 
class Abra_Exception_FileIOException extends Exception {} 

所以ErrorController正常工作時,我只能扔Abra_Exception_DuplicateFileException 因爲確實有一種叫DuplicateFileException文件,但是當我拋出任何其他比異常應用程式的空檔。

我只是不能相信我必須爲他們每個人創建一個文件。 那麼如何解決它?

感謝您的閱讀。

+0

爲什麼你不相信嗎? – Phil 2011-05-29 00:30:34

+0

它似乎不是傳統的。這幾乎就像我會創建空文件4或5次 – 2011-05-29 11:43:43

+1

哪個* convention *是從哪裏搖擺?大多數OOP語言似乎更喜歡直接的類到文件映射 – Phil 2011-05-29 14:32:58

回答

1

Zend自動加載器通過將請求的類名映射到文件系統路徑來工作,因此您無法爲文件名不匹配的類加載文件。

如果你真的想堅持下來的這條道路,我只希望在您的Bootstrap類的文件,如

protected function _initRequires() 
{ 
    require_once 'Abra/Exception/DuplicateFileException.php'; 
    // assuming your "library" folder is on the include path 
} 
+0

我不h this這是一個好方法:) – 2011-05-30 12:35:22

+0

@Tomáš謹慎解釋? – Phil 2011-05-30 15:10:50

+0

主要是因爲它會在引導時加載它們。想象一下你在一個文件中有類似Zend_GData(20+類)的東西。包含這樣的代碼庫對於內存消耗非常不利。即使在不需要時也會需要它。對於簡單的4行文件,就像它會做的那樣,但通常它是一種不好的做法。 – 2011-05-30 17:06:45

2

正確的Zend路將實現自己的自動加載類。 IT將實施自動加載方法。然後,您可以使用Zend_Autoloader自動加載器堆棧來添加您的類。你只需要在你的類名 - >文件名映射中有某種系統/邏輯。

class Abra_Autoloader 
{ 
    public function autoload($className) 
    { 
     if (strpos('Abra_Exception', $className) !== false) { 
      include $someFile; //faster 
     } 
    } 
} 

//anywhere in bootstrap (preferably in some autoloading section of yours) 
// autoloader will load only classes starting with "abra" 
$autoloader = Zend_Loader_Autoloader::getInstance(); 
$autoloader->setFallbackAutoloader(true); 
$autoloader->pushAutoloader(array('Abra_Autoloader ', 'autoload'), 'Abra'); 

請注意,至少德自動加載類應該是Zend_Loader來加載,加載:)

+0

你好,謝謝你的建議。你的代碼假定類Abra_Autoloader位於'APPLICATION_PATH'/../library/Abra"'下,但放在哪裏:'$ autoloader-> pushAutoloader(array('Abra_Autoloader','autoload'),'Abra') ;' – 2011-05-30 17:53:29

+0

查看更新後的答案;) – 2011-05-30 17:57:20

+0

謝謝。會給它一個嘗試,感謝很多 – 2011-05-30 19:24:57

相關問題