Dav*_*las 5 php error-handling
我是php的新手,因为似乎没有从方法到其调用者的错误对象通信,我感到有点困惑.
这两个是我学习使用的方式:
如果一个方法不应该通知错误的调用者它只是触发一个错误,如果这不是E_USER_ERROR它只是返回FALSE告诉调用者出错了.
另一方面,如果方法需要向调用者发回一些错误信息,则应该引发异常.
来自COCOA我已经学会在非常条件下使用异常(程序员错误导致的不可恢复的错误).在任何其他情况下,只需将错误对象传递给调用者.
Gor*_*don 10
PHP有两种主要的机制来指示和处理程序流中的错误:
选择哪个取决于您的个人喜好.例外是对象,因此如果您想要执行OOP或来自也使用例外的其他语言,您可能希望使用它们.基于非异常的错误处理适用于PHP可以发出的所有通知,警告和错误,以及您自己的那些变体.如果要将这些转换为异常,请查看ErrorException.
但是,正如您已经提到的:例外是针对不可恢复的情况.它们不用于管理常规控制流程.因此,异常不是将错误消息发送回调用者的某种标准机制,例如,您不应该这样做:
class FooValidator
{
public function isValid($valueToValidate)
{
if ($this->satisfiesRules($valueToValidate) {
return true;
}
throw new ValidationException('Foo didnt satisfy rule Bar');
}
}
Run Code Online (Sandbox Code Playgroud)
他们在呼叫者中尝试/捕捉它.验证失败是可恢复的情况.
一种选择是引入通知对象:
class FooValidator
{
public function isValid($valueToValidate, Notification $notification)
{
if ($this->satisfiesRules($valueToValidate) {
return true;
}
$notification->addMessage('Foo didnt satisfy rule Bar');
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,Validator仅返回一个布尔值,但可以收集有关传递的Notification对象中验证失败原因的其他信息.这比从调用返回错误对象要清晰得多,因为我们不必检查返回类型.如果验证返回false,我们知道我们可以检查Notification对象.由于对象是通过引用传递的,因此我们不需要从调用中返回对象,而只需从调用者访问收集的消息.