2012-11-29 77 views
0

我聽說將所有錯誤轉換爲異常是一種很好的做法。我完全同意這一點,這種解決方案的許多專家之一是,我只有一個處理程序,而不是有兩個單獨的 - 對於錯誤和異常。將錯誤轉換爲PHP中的異常 - 腳本執行

但是,將通知/警告轉換爲異常會在執行腳本時停止腳本執行。這是預期的行爲嗎?

+0

呃,是嗎?這就是未捕獲的異常情況... – deceze

+0

如何捕獲意外的通知/警告?我不。我應該抓住一切可能會發出通知/警告的東西嗎? – khernik

+1

您可以使用catch(Exception $ e)塊。您可以將這些捕獲量置於代碼中,以最大限度地捕獲它們;如果您的項目有一個入口點,那麼您可以在那裏找到所有的入口點。 – RonaldBarzell

回答

2

你必須小心使用異常處理錯誤。對此有兩種思想流派。

一條學校規定,使用異常錯誤是一件壞事,而在一般例外應謹慎使用,由於控制混亂的流程,他們可能會導致。

其他學校喜歡他們,因爲異常必須要處理,他們讓你的代碼if語句被混亂。

在任何情況下,如果您使用異常,您必須決定正確的處理。當你抓到他們會發生什麼?你能恢復嗎?你將如何康復?你會優雅地終止嗎?

簡單地使用例外不是故事的結束,而不是一個長鏡頭。

0

您可以捕捉異常。例如功能:

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後,執行將停止。

+0

但它沒有任何意義。假設我將在整個網站上使用try-catch。它會正確捕獲通知/警告,但錯誤不會停止腳本執行。沒有捕捉到的異常會對致命錯誤執行腳本,但也會在通知/警告中執行腳本。更不用說在第一種情況下,我將無法訪問處理程序。 – khernik