调用未定义的方法 Exception::getSeverity()

IMB*_*IMB 0 php

我使用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();          
}
Run Code Online (Sandbox Code Playgroud)

现在它只出现在默认值$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),所以当出现第三方异常时会出现问题,会导致Fatal Error。我该如何解决这个问题?

lan*_*nzz 5

您可以检查捕获的异常是否为ErrorException

if ($e instanceof ErrorException) {
    echo $e->getSeverity();
} else {
    // no getSeverity() available
}
Run Code Online (Sandbox Code Playgroud)