PHP7 set_exception_handler和set_error_handler回调混合

时间:2016-02-05 06:01:21

标签: php error-handling exception-handling php-7

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

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

  

Uncaught TypeError:传递给Debug :: _ exceptionHandler()的参数1必须是Exception的实例,在SomePath \ Debug.php中给出Error的实例:518堆栈跟踪:#0 [内部函数]:Debug :: _ exceptionHandler(对象(错误))#1 {main}抛出

我查看了Debug课程,并在set_exception_handler

中找到了set_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处理

  

未捕获错误:在SomePath中调用未定义的函数set_magic_quotes_runtime()...

有人可以帮我这个吗?

由于

1 个答案:

答案 0 :(得分:4)

PHP 7中的异常层次结构已更改,如果您查看set_exception_handler void handler ( Throwable $ex ); ,您会注意到:

  

从PHP 7开始,大多数错误都是通过抛出错误异常来报告的,错误异常也会被处理程序捕获。 Error和Exception都实现了Throwable接口。这是PHP 7以来的处理程序签名:

newArgs[i]

可以找到PHP 7中异常层次结构更改的详细信息manual page