我正在开发自己的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等流行的框架如何向您显示一条漂亮的消息,向您显示错误的出处,它们在哪里保留了验证其是否正确的所有逻辑?应该或不应该抛出异常,最重要的是它们在哪里捕获到它们的??
答案 0 :(得分:1)
大多数框架都通过自定义错误处理程序显示这些错误。 laravel使用的一种流行的是whoops。
您只需要将其注册为自定义处理程序,就会看到漂亮的错误页面:
$whoops = new \Whoops\Run;
$whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);
$whoops->register();
请记住,您应该在生产时禁用这些功能(以免显示堆栈跟踪/代码)。
答案 1 :(得分:1)
请参见两个功能set_error_handler和set_exception_handler。这些函数使您可以注册在发生错误或异常时调用的回调函数。
这些回调函数由Php运行时调用,并提供错误详细信息作为参数。错误详细信息包括错误行号,堆栈跟踪,文件名等。然后,回调函数可以格式化并显示此信息