Является ли хорошей идеей генерировать исключения для цепных методов?
Например:
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
может работать без вложений, мы также не можем вернуть ошибку в этом методе.
Итак, есть ли хорошая практика ведения журнала ошибок / обработки при использовании цепных методов?
Вы должны выдать исключение везде, где хотите прервать поток программы. Неважно, прикован он или нет. В вашем случае, если добавление вложения не удалось, вы хотите остановить его, прежде чем оно достигнет send()
, Это отлично подходит для исключения.
Очевидно, вам нужно убедиться, что вы завернули все выполнение в try
/catch
или вы получите фатальную ошибку (где останавливается весь PHP).
Других решений пока нет …