Ste*_*ose 3 php oop design-patterns exception
我正在努力解决何时使用几个PHP SPL异常,特别是在下面的场景中,
class MyClass {
protected $data1;
protected $data2;
public function setData1($data1) {
$this->data1 = $data1;
}
public function setData2($data2) {
$this->data2 = $data2;
}
public function invokeProcess() {
$this->validateData();
}
protected function validateData() {
if(!$this->data1) {
// Which Exception do I throw? See explanation below
}
if($this->data1 && $this->data2) {
// Which Exception do I throw? See explanation below
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个被构建的类.然后,用户在对象上设置一些数据,并调用进程.这个过程的第一件事是验证对象上的数据,以确保存在所需的数据,数据组合是否正确等,如果不是,则需要抛出异常.
那么我会抛出什么异常?
我的验证确实检查了两种情况,
对于#1,我左右为难BadMethodCallException,RuntimeException和LogicException.对于#2,我认为它只是一个LogicException?
那么,我使用哪些?
注意:在有人要求之前,我不能在构造函数中将所需数据作为参数,因为在设置其他数据时只需要一些数据等.
如果你必须使用SPL异常,那就是RuntimeException.这是指只能在运行时检测到的错误(例如错误的输入数据).
LogicException将是一个不恰当的选择,因为它指的是一个逻辑错误在你的程序,而不是在接收到的数据.想想LogicException作为一个紧急按钮,当您的程序检测到一个必须的条件永远是真不(对比这与一个条件应该是真实的程序来执行其预期功能).
BadMethodCallException 也不合适,因为它代表了一个
如果回调引用未定义的方法或缺少某些参数,则抛出异常.
您的逻辑需要的某些数据可能会丢失,但是如果没有正确数量的参数,则没有方法调用.
在你的鞋子里,我要么定义自己的例外(衍生自RuntimeException),要么RuntimeException直接使用.