我聽說將所有錯誤轉換爲異常是一種很好的做法。我完全同意這一點,這種解決方案的許多專家之一是,我只有一個處理程序,而不是有兩個單獨的 - 對於錯誤和異常。將錯誤轉換爲PHP中的異常 - 腳本執行
但是,將通知/警告轉換爲異常會在執行腳本時停止腳本執行。這是預期的行爲嗎?
我聽說將所有錯誤轉換爲異常是一種很好的做法。我完全同意這一點,這種解決方案的許多專家之一是,我只有一個處理程序,而不是有兩個單獨的 - 對於錯誤和異常。將錯誤轉換爲PHP中的異常 - 腳本執行
但是,將通知/警告轉換爲異常會在執行腳本時停止腳本執行。這是預期的行爲嗎?
你必須小心使用異常處理錯誤。對此有兩種思想流派。
一條學校規定,使用異常錯誤是一件壞事,而在一般例外應謹慎使用,由於控制混亂的流程,他們可能會導致。
其他學校喜歡他們,因爲異常必須要處理,他們讓你的代碼if語句被混亂。
在任何情況下,如果您使用異常,您必須決定正確的處理。當你抓到他們會發生什麼?你能恢復嗎?你將如何康復?你會優雅地終止嗎?
簡單地使用例外不是故事的結束,而不是一個長鏡頭。
您可以捕捉異常。例如功能:
function myFunction($num){
if(!is_int($num)){
throw new Exception('Int expected. ' . gettype($num) . ' given instead.');
}
}
然後接住可能或可能不會被拋出的異常(IF是有意義趕上他們):
try{
myFunction('Hello?');
}
catch(Exception $e){
//Do something
var_dump($e);
}
你也應該看看到函數set_exception_handler:
設置默認的異常處理程序,如果在try/catch塊中沒有捕獲到異常,則返回 。調用 exception_handler後,執行將停止。
但它沒有任何意義。假設我將在整個網站上使用try-catch。它會正確捕獲通知/警告,但錯誤不會停止腳本執行。沒有捕捉到的異常會對致命錯誤執行腳本,但也會在通知/警告中執行腳本。更不用說在第一種情況下,我將無法訪問處理程序。 – khernik
呃,是嗎?這就是未捕獲的異常情況... – deceze
如何捕獲意外的通知/警告?我不。我應該抓住一切可能會發出通知/警告的東西嗎? – khernik
您可以使用catch(Exception $ e)塊。您可以將這些捕獲量置於代碼中,以最大限度地捕獲它們;如果您的項目有一個入口點,那麼您可以在那裏找到所有的入口點。 – RonaldBarzell