2015-07-22 4 views
1

Является ли хорошая идея исключать исключения из цепочечных методов?Обработка ошибок цепочки PHP

Например:

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/поймать.

В противном случае, если мы не выкинули ошибку, когда addAttachment не удался, использование не заметит, если что-то пошло не так. И если send может работать без вложений, мы не сможем вернуть ошибку на этот метод.

Итак, существует ли какая-либо хорошая практика регистрации/обработки ошибок при использовании цепных методов?

ответ

1

Вы должны выбросить исключение в любом месте, где хотите прерывать поток программы. Неважно, прикован ли он или нет. В вашем случае, если сложение приложения не удалось, вы хотите остановить его, прежде чем он достигнет send(). Это идеальное использование Исключения.

Очевидно, что вам нужно убедиться, что вы завершаете все исполнение в try/catch или вы получите Fatal error (где останавливается все PHP).

Смежные вопросы