2012-08-02 95 views
4

作爲一項規則,我儘量避免拋出異常的實例,因爲這並沒有傳達有關錯誤的信息。異常類應該如何特定?

但我發現,我得到了相當多的空異常類,它看起來像這樣的......

class DataNotFoundException extends Exception { 
    // just a tagging class 
} 

所以在功能類是相同的異常。唯一的功能意義是我現在能做到這一點...

try { 
    ... some code which throws exceptions ... 
} catch (DataNotFoundException $dnfe) { 
    ... do stuff ... 
} catch (OtherException $oe) { 
    ... do other stuff ... 
} 

我的問題是,這裏是具有微小的異常類的數量龐大,只是拋出異常的實例之間的平衡。有沒有人有何時引入一個新的Exception類的準則?

+1

如果您確切知道拋出哪種異常,則可以控制它輸出的錯誤消息,覆蓋現有功能並定義附加功能。 – Matt 2012-08-02 16:18:34

回答

1

包含大量特定例外情況並不是一種不好的做法,但只包含相關和可重現的例外情況。如果你選擇與他們非常具體,它應該按照特定的順序,以及;從非常具體到,以一般。

try {} catch (CryptographicException e) 
{ ...doSomething } 

catch (ArgumentOutOfBoundsException e) 
{ ...doSomething } 

catch (Exception e) 
{ ...doSomething } 

這是因爲事件的處理,如果一般的異常是第一個,所有其他將被跳過。在一般情況之前有特定的例外情況會有助於您從中獲得更多信息。

+0

謝謝,那真的是我想知道的。我只是擔心我可能會遇到Exception類的溢出,但是您的「相關性和可重複性」測試是一種考慮它的好方法。 – 2012-08-03 22:51:56

2

當您有差異邏輯來處理異常時,您必須始終擴展Exception類。尋找PHP Spl庫,通過它包含一些異常類,所以你不需要定義你自己的。

+0

由不同的邏輯,你的意思就像在我的問題代碼中的兩個catch子句? – 2012-08-02 16:22:52

+0

啊,SPL很方便 - 有很多標準的例外! – 2012-08-02 16:33:02