我正在努力思考何时使用两个 PHP SPL Exceptions ,具体在以下场景中,
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
}
}
}
我有一个构造的类。然后用户在对象上设置一些数据,并调用一个过程。此过程所做的第一件事是验证对象上的数据,以确保所需数据存在、数据组合正确等,如果不正确,则需要抛出异常。
那么我抛出什么异常?
我的验证确实检查了两种情况,
- 缺失数据,也就是未设置的数据。
- 数据组合不当。
对于 #1,我在 BadMethodCallException
、RuntimeException
和 LogicException
之间左右为难。对于 #2,我认为它只是一个 LogicException
?
那么,我使用哪些?
注意:在任何人问之前,我不能将所需数据作为构造函数中的参数,因为某些数据仅在设置其他数据时才需要,等等。
最佳答案
如果您必须使用 SPL 异常,那就是 RuntimeException
。那是指只能在运行时检测到的错误(例如错误的输入数据)。
LogicException
将是一个不合适的选择,因为它 refers to a logic error in your program ,而不是在它接收到的数据中。当您的程序检测到必须始终为真的条件不是时,将 LogicException
视为紧急按钮(将其与应该 对于程序执行其预期功能而言是真实的)。
BadMethodCallException
也不合适,因为它代表一个
Exception thrown if a callback refers to an undefined method or if some arguments are missing.
您的逻辑需要的一些数据可能会丢失,但是没有正确数量的参数就没有方法调用。
在您看来,我要么定义自己的异常(派生自 RuntimeException
),要么直接使用 RuntimeException
。
关于php - 在流程之前验证集数据时,我应该使用哪个 SPL 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5245453/