2011-05-03 14 views
24

好吧,它是一個非常蹩腳的問題,但我希望我會有壓倒性的迴應:)我們需要什麼PHP異常代碼?任何用例場景?

當我在PHP中拋出異常時,我可以添加一個代碼到消息。
我發現一個異常,並根據其類型處理它(如InvalidArgumentExceptionOutOfBoundException)。我登錄消息或顯示它或做任何合適的。
我可以添加一個前面的異常來跟蹤錯誤原點的路徑。

但有一件事我從來沒有用過或從未想過:代碼有多大用處?

例如:

throw new Exception("db Error", $code, $previousException); 

我該怎麼做$code

+0

(無關:我非常肯定「用例場景」是雙倍...) – Rudie 2011-05-03 11:32:43

+0

只是要指出,你錯了。它應該是:'拋出新的異常(「db錯誤」,$ code,$ previousException);' – 2011-05-03 11:36:31

回答

31

該消息用於顯示給用戶,而代碼供程序使用。因此,例如,在你的「數據庫錯誤」的例子,你就可以彌補一組代碼,像

  1. 無法查詢過程中連接
  2. 錯誤
  3. 空的結果
  4. 錯誤關閉連接

然後使用適當的代碼。然後當你的代碼的其他部分看到他們的例外時,他們會知道發生了什麼,並可能智能地處理它。

+8

什麼是首選?使用異常代碼或多個異常類('\ Exception \ MySQL \ ConnectionFailed','\ Exception \ MySQL \ EmptyResultSet'等)?謝謝! :) – 2011-05-03 11:37:36

+14

@Phillipe:這是一個個人選擇的問題,真的,但一般情況下,如果案例數量很少,可以使用不同的類,如果代碼很大,則使用代碼。在這個有四種情況的數據庫示例中,不同的類將是確定的。但是如果你想到其他五種可能出錯的事情,那麼使用九個不同的異常類將會很痛苦,單獨使用代碼會更有意義。 – 2011-05-03 12:06:15

+0

謝謝,這很有道理! :-) – 2011-05-03 16:38:19

10

如何解釋$code取決於異常類型。例如,如果您有一個表示MySQL數據庫錯誤的Exception子類,那麼$code可能是本機MySQL錯誤代碼。在出現低級IO錯誤的情況下,這可能是從<errno.h>開始的值。

基本上,$code應該包含任何你需要以編程方式處理異常。大多數例外都是在某處處理的。如果您的所有異常都只是顯示爲錯誤,那麼$code僅在需要包含來自類庫(如MySQL客戶端庫)的錯誤代碼時纔有用。

2

我見過實現(CakePHP),其中$code被用作HTTP狀態碼。

我用一個例外子集實現了這個概念。因此,從HttpException延伸出來的所有異常都會響應HTTP錯誤

2

在面向對象的語言中,異常的類型表達了它的錯誤類型。但是,例如,如果您有兩件事情可以生成相同的異常類型,則可以使用錯誤代碼提供更多詳細信息。

錯誤代碼是非面嚮對象語言中廣泛使用的一種功能,用於傳達錯誤類型。

相關問題