2016-08-23 78 views
2

我想捕獲一個特定的異常並正確處理它。不過,我之前沒有這樣做過,我想以最好的方式做到這一點。在php中處理特定的例外

會不會是正確的,以創建一個單獨的類類似

class HandleException extends Exception 
{ 
    //my code to handle exceptions; 
} 

,並在其中有不同的方法處理不同的異常情況?據我瞭解,Exception類就像一個PHP中的「集成」類,所以它可以被擴展,並且如果一個Exception被捕獲,它不是強制性的終止程序的流程?

而且,這個類的一個實例將在發生異常時被創建? STH。像

 catch (\Exception $e) { 
     $error = new HandleException; 
    } 
+1

不,這是不對的。請閱讀https://secure.php.net/manual/en/language.exceptions.php,然後(一旦你完全理解內置異常是如何工作的)https://secure.php.net/manual/en/language .exceptions.extending .php – Chris

+1

爲了處理特定類型的異常,你必須處理你自己的異常(這是正確的),但在你的業務邏輯中,你必須拋出你創建的異常,然後捕獲它(無論你想做什麼處理邏輯)。在這裏檢查這個例子:https://eval.in/627662 –

回答

2

CAN用你自己的擴展基本的Exception對象來提供你自己的異常類型,例如,

class FooExcept extends Exception { .... } 
class BarExcept extends Exception { .... } 

try { 
    if ($something) { 
     throw new FooExcept('Foo happened'); 
    } else if ($somethingelse) { 
     throw new BarExcept('Bar happened'); 
    } 
} catch (FooExcept $e) { 
    .. foo happened, fix it... 
} catch (BarExcept $e) { 
    ... bar happened, fix it ... 
} 

如果發現異常,那麼程序不一定必須中止。這將取決於異常處理程序本身。但是,如果一個異常氣泡總是回到調用堆棧的頂部,並且沒有被捕獲,那麼整個腳本將會中止並出現未處理的異常錯誤。

2

從手動

多個catch可以用來捕捉的 異常不同的類。在 序列中定義的最後一個catch塊之後,正常執行(在 try塊內沒有引發異常)將繼續。異常可以拋出(或重新拋出)在一個捕獲塊 塊。

所以,你可以做這樣的事情:

try { 
    // some code 
} catch (HandleException $e) { 
    // handle sthis error 
} catch (\Exception $e) { 
    // handle that error 
} 

這將處理不同的異常。您也可以在更新版本的PHP中使用finally關鍵字。