PHP有指示和處理程序中的流誤差兩種主要機制:
要選擇哪個取決於您的個人偏好。例外是對象,所以如果你想做OOP或來自另一種也使用例外的語言,你可能想要使用它們。基於非異常的錯誤處理適用於PHP可以發出的所有聲明,警告和錯誤,以及您自己的變體。如果你想把它們變成例外,看看ErrorException。
但是,正如您已經提到的:異常是針對不可恢復的情況。他們是而不是用於管理定期控制流量。因此,例外並不是將錯誤消息發回給調用者的某種標準機制,例如,你不應該這樣做:
class FooValidator
{
public function isValid($valueToValidate)
{
if ($this->satisfiesRules($valueToValidate) {
return true;
}
throw new ValidationException('Foo didnt satisfy rule Bar');
}
}
他們嘗試/捕獲在調用者。驗證失敗是可恢復的情況。
一種辦法是引進Notification Object:
class FooValidator
{
public function isValid($valueToValidate, Notification $notification)
{
if ($this->satisfiesRules($valueToValidate) {
return true;
}
$notification->addMessage('Foo didnt satisfy rule Bar');
return false;
}
}
在上面的例子中,驗證只返回一個布爾值,但可以收集關於爲什麼驗證在傳遞通知對象失敗的附加信息。這比從調用中返回錯誤對象更清潔,因爲我們不必檢查返回類型。如果驗證返回false,我們知道我們可以檢查Notification對象。由於對象是通過引用傳遞的,所以我們不需要從調用中返回對象,只需訪問調用者收集的消息即可。
我打算回過頭來問一下「什麼時候最好返回一個錯誤對象而不是引發異常?」。 – 2012-01-28 10:27:07