PHP7 set_exception_handler 和 set_error_handler 回调混合

PHP7 set_exception_handler and set_error_handler callbacks are mixed

似乎我在 php7.0.3 中发现了一些错误,但我不确定问题是否出在我这边,所以我决定先写在这里

我最近将我的服务器 php 版本更新到 php7.0.3,当然还有关于弃用方法等的错误,我正在一个一个地修复它们,直到我来到这个

Uncaught TypeError: Argument 1 passed to Debug::_exceptionHandler() must be an instance of Exception, instance of Error given in SomePath\Debug.php:518 Stack trace: #0 [internal function]: Debug::_exceptionHandler(Object(Error)) #1 {main} thrown

我检查了 Debug class 并发现 set_exception_handlerset_error_handlerfunction enable()

中调用
public static function enable( ..some params.. ){
    ...
    set_exception_handler(array(__CLASS__, '_exceptionHandler'));
    set_error_handler(array(__CLASS__, '_errorHandler'));
}

// where _exceptionHandler function defined as
public static function _exceptionHandler(Exception $exception)
{ ... }

// and _errorHandler defined as
public static function _errorHandler($severity, $message, $file, $line, $context)
{ ... }

实际上错误对我来说很明显它告诉它不能将 Error 类型的对象传递给 _exceptionHandler 因为它除了 Exception 类型,但是 问题 为什么它试图将它传递给 _exceptionHandler 而不是 _errorHandler ,因为它也定义了?是错误还是我在 errorexception 处理程序的定义中遗漏了什么?

注意:我尝试使用 set_error_handler 将其作为第二个参数传递 E_ALL 等,但注意有帮助...

我也遇到了抛出的错误,应该由 _errorHandler 处理,但 _exceptionHandler 却被

处理

Uncaught Error: Call to undefined function set_magic_quotes_runtime() in SomePath...

有人可以帮我解决这个问题吗?

谢谢

PHP 7 中的异常层次结构已更改,如果您查看 set_exception_handlermanual page,您会注意到:

Since PHP 7, most errors are reported by throwing Error exceptions, which will be caught by the handler as well. Both Error and Exception implements the Throwable interface. This is the handler signature since PHP 7:

void handler ( Throwable $ex );

有关 PHP 7 中异常层次结构更改的详细信息,请参见 here