最近我一直在使用Exceptions。我認爲記錄未捕獲的異常是有意義的,因爲它極大地幫助開發人員通過查看異常日誌來解決源代碼中可能出現的問題。但是,如果處理異常,是否需要再次登錄?是的,在一定程度上。如果您的代碼中存在錯誤的「壞」開發人員,那麼通過簡單地捕獲異常將會使這些錯誤「消失」。例如:記錄捕獲和未捕獲的異常?
try
{
fopen('/path/to/file','w');
}
catch (Exception $e)
{
// Display an error to user
}
上面的代碼是PHP。關鍵是,這種代碼imo不應該存在。例外情況意味着特殊情況並且很少發生,但是通過這些代碼,它們發生得比較少。例如,開發者不檢查文件是否存在,也不檢查他是否有權寫入。相反,它應該是:
try
{
if (file_exists('/path/to/file') && is_writable('/path/to/file'))
fopen('/path/to/file','w');
else
// Display an error to user about file not existing or not being writable
}
catch (Exception $e)
{
// Display an error to user about an unexpected error
}
這樣做現在非常有意義。只有在例外情況下(例如服務器崩潰,停電等)纔會拋出異常。但是如果開發人員對所有事情都使用Exceptions並且省略了檢查 - 那麼我是否有辦法記錄捕獲到的異常?
我不希望開發人員將所有內容放在try-catch塊中以「解決」問題。我希望他們明確地檢查任何他們應該檢查 - 離開例外像硬件故障,服務器崩潰等異常情況
set_exception_handler(http://www.php.net/manual/en/function.set-exception-handler.php) – troelskn 2009-07-04 15:28:31