2010-03-16 26 views
1

我正在構建基於Zend Framework的自動加載的自定義自動加載器(相關問題here)。在自定義Zend_Autoloader中正確的錯誤處理?

的基本方法,從這個問題採取的是

class My_Autoloader implements Zend_Loader_Autoloader_Interface 
{ 
    public function autoload($class) 
    { 
     // add your logic to find the required classes in here 
    } 
} 

,然後結合新的自動加載類一類的前綴。

現在我不確定的是如何處理autoload方法中的錯誤(例如,「找不到類文件」),以適當的ZF兼容方式處理。我對框架,其慣例和風格不熟悉。

  • 我是否靜靜地返回false並讓類創建進程崩潰?

  • 是否以某種方式輸出錯誤或日誌消息(這將很好地查明問題)並返回false?如果是這樣,Zend的做法是什麼?

  • 我是否觸發錯誤?

  • 我是否會拋出異常?如果是這樣,什麼樣的?

回答

1

這取決於錯誤的種類。如果一個類無法加載,我會認爲這是一個致命的錯誤。因此,我會拋出一個異常,例如

class My_Autoloader_Exception extends Exception {} 

你會發現,ZF採用了大量的包級別的自定義異常的,也provides a class這從延長(雖然我會考慮這個選項)。

順便提及,存在的Zend_Exception與它們自動加載機的使用例:

try { 
     // Calling Zend_Loader::loadClass() with a non-existant class will cause 
     // an exception to be thrown in Zend_Loader: 
     Zend_Loader::loadClass('nonexistantclass'); 
    } catch (Zend_Exception $e) { 
     echo "Caught exception: " . get_class($e) . "\n"; 
     echo "Message: " . $e->getMessage() . "\n"; 
     // Other code to recover from the error 
    } 
2

ZF本身使用兩種不同的方法:

  • Zend_Loader(所述自動加載機構)拋出在Zend_Exception情況有問題
  • Zend_Loader_Autoloader返回false當所使用的註冊自動加載機返回false

Zend_Loader_Autoloader不趕在使用自動加載到最後你的自定義異常拋出的任何異常將向上冒泡通過Zend_Loader_Autoloader。我個人只是返回false萬一我無法加載一個請求的類。