我使用ErrorException作为错误和异常的中央错误处理函数:
示例:
set_error_handler('my_error_handler');
set_exception_handler('my_exception_handler');
function my_error_handler ($errno, $errstr, $errfile, $errline)
{
my_exception_handler(new ErrorException($errstr, 0, $errno, $errfile, $errline));
}
function my_exception_handler ($e)
{
echo $e->getSeverity();
echo $e->getCode();
echo $e->getMessage();
}
现在看来$e->getSeverity();
仅出现在ErrorException
中,而不是默认Exception
;
因为当我throw new Exception('test');
时,我得到Fatal error: Call to undefined method Exception::getSeverity()
。
但当我throw new ErrorException('test');
时,它按预期工作。
这似乎是合乎逻辑的但有一种方法我仍然可以使用throw new Exception('test');
而不会出现致命错误?大多数第三方库使用Exception(而不是ErrorException),因此当发生第三方异常时会出现问题,这会导致致命错误。我该如何解决这个问题?
答案 0 :(得分:3)
您可以检查捕获的异常是否为ErrorException
:
if ($e instanceof ErrorException) {
echo $e->getSeverity();
} else {
// no getSeverity() available
}