2010-05-27 85 views
4

錯誤和異常有什麼區別?異常和錯誤之間的區別?

我已經在網上閱讀了大量的資源和一些書籍,但是提供的解釋並不是很全面。因此,我仍然感到困惑。

謝謝!

編輯: 它看起來像我問了兩個問題,可能會令人困惑。我想要回答的主要問題是錯誤和例外之間的區別。所以,我已經編輯了上述更具體。謝謝大家的答案。

+0

請注意,您只能在特殊情況下使用例外。無效的用戶輸入始終發生,應該是預期的。 – 2010-05-27 18:09:33

+0

重複。應該與http://stackoverflow.com/questions/841500/php-exceptions-vs-errors – Kenaniah 2010-05-27 18:17:51

回答

5

錯誤處理沒有「應該」或「最佳」的方式。

一般來說,有兩種類型的錯誤

  1. 的那些被程序的其他部分進行處理。用戶從來不會看到或瞭解這些錯誤,至少不會以直接的方式。
  2. 那些導致用戶需要被告知的故障足夠的故障。

請注意,這些都與您用來處理錯誤的特定PHP機制無關。

如果您使用例外... 然後我建議全面使用例外Register an exception handler並讓它做大部分工作 - including other PHP errors。無效的登錄詳細信息?

class InvalidLoginException extends Exception 
{ 
    protected $message = 'Login information is incorrect. Please try again.'; 
} 

然後你有一堆的實施選擇。或者,如果您願意,可以讓異常處理程序執行此操作。甚至在更靈活的方式

class ApplicationErrorException extends Exception{} 
class InvalidLoginException extends ApplicationErrorException 
{ 
    protected $message = 'Login information is incorrect. Please try again.'; 
} 

然後,在異常處理程序

if ($exception instanceof ApplicationErrorException) 
{ 
    // dislpay error message 
} 

但例外是不是唯一的方式,和by some not even considered a good way

+3

合併你應該把你的文章的最後一行放在頂部並加粗。對於初學者來說,瞭解爲什麼以及何時應該使用某些東西,而不是僅僅告訴他們如何去做,這一點更爲重要。 – 2010-05-27 18:11:49

5

都沒有。當代碼做錯了時,異常和錯誤是有用的。用戶或多或少地期望輸入不正確的登錄信息。檢查用戶名/密碼是否正確,如果不正確,請將用戶重定向回登錄頁面(header('location:login.php?failed=1');),然後如果設置了$_GET['failed'],則顯示一條消息。這將是最簡單的方法。

關於例外/錯誤...你通常應該堅持例外。你拋出一個異常,然後你抓住它並處理它。我認爲trigger_error更適用於在您不知道如何處理catch塊中的錯誤時將錯誤傳播回客戶端。

0

首先,異常可以繼續執行腳本。此外,trigger_error始終會報告觸發trigger_error的行和文件。