2009-11-28 29 views
1

我們正在爲專門的PHP應用程序開發一個集合類。其中有map,each等功能。適當使用異常?

關於調用一些函數的一個壞論點已經引起了一場爭論。例如:

public function each($fn) { 
    // ... 
} 

// ... 

$collection->each('not a function'); 

應該打電話給each拋出異常嗎?它應該返回null?我們是否應該忽略錯誤的參數,並在嘗試調用非遠程函數時讓運行時錯誤?我不知道我們應該如何處理這種情況。

+0

重複:http://stackoverflow.com/questions/77127/when-to-throw-an-exception – LiraNuna 2009-11-28 00:53:59

+1

@LiraNuna,它不是重複的。該問題涉及用戶輸入驗證;這涉及編碼器輸入驗證。 – strager 2009-11-28 00:55:45

+0

他們仍然是一樣的。你期望程序員用動態語言給你提供錯誤的輸入。 – LiraNuna 2009-11-28 01:00:30

回答

3

例外情況適用於特殊情況,而不是錯誤的編碼器。

改爲使用斷言。 見http://php.net/manual/en/function.assert.php

如果這是外用庫,然後在公開的方法的例外可能是有意義的,(例如InvalidArgumentException),但是,在一般情況下,斷言是更適合內部驗證代碼符合您要求的條件。

也許另一個例子將有助於澄清事情,很好用異常的做的是當文件訪問和有一些可能性,即資源將無法訪問由於關閉服務器等

另請參閱Design by contract using assertions or exceptions?

+0

by-contract-by-assert-by-exception似乎說,使用異常來報告錯誤的參數 - 特別是在接口方法的意義上,其中方法調用非常像HTML表單輸入 - 你總是檢查一下,不是嗎? – Don 2009-11-28 02:08:46

+0

不好的html表單輸入雖然不是特別的例外,但它是相當期待的。用「if」處理它並繼續前進。異常不是流量控制。 – 2009-11-28 05:13:52