2012-11-14 35 views
4

我開始使用「真正」異常而不是自定義錯誤函數。PHP的例外 - 嘗試/趕上必要?

我想我不需要try/catch-block每次,它只是爲了拋出一個異常,但現在我得到一個致命的錯誤,因爲這些未捕獲的異常。

當我設置error_reporting(0)時,一切正常,但我想避免錯誤。有沒有人知道替代嘗試/捕捉或如何拋出異常而不會發生致命錯誤?

在此先感謝!

+2

呃......沒有。一個例外的完全點是,如果沒有發現它總是致命的。你不應該在所有地方都需要'try/catch'塊。你應該使用'set_exception_handler'設置一個「最後機會」異常處理程序 – rdlowrey

+1

這是一個Web或命令行應用程序嗎?你應該抓住例外,只要你能夠有意義地處理它們。在某些情況下,這些情況屬於應用程序的入口點,但多次在您想要採取某種行動的地方更深入。 –

+0

@大衛:它的網絡應用程序。當然,我試着去捕捉它們,但是例如:在我的DB-Class中,我有一個名爲_handle_error()的方法來處理錯誤並記錄它們。當調用_handle_error()我無法捕捉方法本身拋出的異常。我希望它沒有發佈代碼是可以理解的。 :-) –

回答

5

您可以使用set_exception_handler()來處理所有未捕獲的異常。

您註冊的回調將接收異常作爲其第一個也是唯一的參數。但是,註冊虛擬函數是可能的:

  1. 在生產環境中,建議記錄異常而不是消音;通過這種方式,您可以跟蹤您沒有預料到的異常情況。

  2. 腳本執行停止後,您的處理程序完成。

+0

太好了,謝謝!我只是設置一個沒有內容的空函數作爲exception_handler,並且不再有致命的錯誤。我希望這不是太快和骯髒.. –

+1

很高興知道,當我這樣做時,我已經添加了兩件事情要記住。 –