正确处理PHP异常

时间:2019-07-20 00:24:12

标签: php exception

我正在开发自己的PHP框架,尽管我的代码按预期工作,但它越来越大。那当然会导致我的框架崩溃的多种方法,所以我决定是时候像其他任何PHP框架一样实现异常处理了,这种“不错”的错误视图告诉您可能出了什么问题。

我已经进行了研究,并了解了扩展PHP默认类的工作方式,我知道我可以扩展该类并自定义错误消息。

我也知道要触发异常,您必须将其抛出并使用“ try / catch”语句捕获它,就像这样……

class MyCustomException extends \Exception()
{
    // My stuff
}

public function dontBeZero($number) 
{
    if ($number == 0) {
        throw new MyCustomException('You gave me zero!!');
    }
}

try {
    dontBeZero(0);
} catch (MyCustomException $e) {
    echo '<pre>';
    $e->getMessage(); 
    echo '</pre>';
}

我理解这一点,但是我真正的问题是:Laravel,Symfony等流行的框架如何向您显示一条漂亮的消息,向您显示错误的出处,它们在哪里保留了验证其是否正确的所有逻辑?应该或不应该抛出异常,最重要的是它们在哪里捕获到它们的??

2 个答案:

答案 0 :(得分:1)

大多数框架都通过自定义错误处理程序显示这些错误。 laravel使用的一种流行的是whoops

您只需要将其注册为自定义处理程序,就会看到漂亮的错误页面:

$whoops = new \Whoops\Run;
$whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);
$whoops->register();

请记住,您应该在生产时禁用这些功能(以免显示堆栈跟踪/代码)。

答案 1 :(得分:1)

请参见两个功能set_error_handlerset_exception_handler。这些函数使您可以注册在发生错误或异常时调用的回调函数。

这些回调函数由Php运行时调用,并提供错误详细信息作为参数。错误详细信息包括错误行号,堆栈跟踪,文件名等。然后,回调函数可以格式化并显示此信息