在链式方法上抛出异常是个好主意吗?
例如:
class Mailer(){
private $attachment;
public function addAttachment($attachment){
if($this->validateAttachment($attachment)){
$this->attachment = $attachment;
}
throw new \InvalidArgumentException('Invalid attachment');
}
public function send(){
[...]
}
private function validateAttachment($attachment){
if($attachment === 'test'){
return true;
}
return false;
}
}
$mailer = new Mailer();
$mailer->addAttachment('invalid')->send();
当然,除非我们使用try / catch,否则会失败并导致致命错误。
否则,如果我们在addAttachment
失败时没有抛出错误,则使用时不会注意到是否有任何错误。
如果send
可以在没有附件的情况下工作,我们也不能在该方法上返回错误。
那么,使用链式方法时,错误记录/处理有什么好的做法吗?
答案 0 :(得分:1)
您应该在任何想要中断程序流的地方抛出异常。它是否被链接并不重要。在您的情况下,如果添加附件失败,您希望在它到达1,293 views
之前停止它。这是对异常的完美使用。
显然,您需要确保将整个执行包装在send()
/ try
中,否则您将收到致命错误(所有PHP停止)。