PHP链接错误处理

时间:2015-07-22 12:09:09

标签: php error-handling exception-handling chaining

在链式方法上抛出异常是个好主意吗?

例如:

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可以在没有附件的情况下工作,我们也不能在该方法上返回错误。

那么,使用链式方法时,错误记录/处理有什么好的做法吗?

1 个答案:

答案 0 :(得分:1)

您应该在任何想要中断程序流的地方抛出异常。它是否被链接并不重要。在您的情况下,如果添加附件失败,您希望在它到达1,293 views之前停止它。这是对异常的完美使用。

显然,您需要确保将整个执行包装在send() / try中,否则您将收到致命错误(所有PHP停止)。