在之前的版本里,如果我们想以特定的方式来处理自定义的Exception,我们需要将其定义在Handler.phpreport方法里,例如这样:

//app/Exceptions/Handler.php

[...]
public function report(Exception $exception)
{
    if ($exception instanceof CustomException) {
        // Do something
    }

    if ($exception instanceof MyOtherException) {
        // Do something
    }

    if ($exception instanceof MyOtherCustomException) {
        // Do something
    }

    return parent::report($exception);
}
[...]

学过我们laravel底层实战解密的同学,应该对此不会陌生,课程里我们以类似的方式处理了一些常见的Exception。

那么之前这种方式,当你有很多个自定义的Exception的时候,这个report方法就会变得臃肿起来,所以在laravel 5.5里,你可以在你自定义的Exception class里也写一个report方法,然后去具体定义该怎样来处理:

//app/Exceptions/CustomException.php

[...]
class CustomException extends \Exception
{
    public function report()
    {
        // send email
    }
}

[...]