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_handler
和 set_error_handler
在 function 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
,因为它也定义了?是错误还是我在 error
和 exception
处理程序的定义中遗漏了什么?
注意:我尝试使用 set_error_handler
将其作为第二个参数传递 E_ALL
等,但注意有帮助...
我也遇到了抛出的错误,应该由 _errorHandler
处理,但 _exceptionHandler
却被
处理
Uncaught Error: Call to undefined function set_magic_quotes_runtime() in SomePath...
有人可以帮我解决这个问题吗?
谢谢
PHP 7 中的异常层次结构已更改,如果您查看 set_exception_handler
的 manual 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。
似乎我在 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_handler
和 set_error_handler
在 function 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
,因为它也定义了?是错误还是我在 error
和 exception
处理程序的定义中遗漏了什么?
注意:我尝试使用 set_error_handler
将其作为第二个参数传递 E_ALL
等,但注意有帮助...
我也遇到了抛出的错误,应该由 _errorHandler
处理,但 _exceptionHandler
却被
Uncaught Error: Call to undefined function set_magic_quotes_runtime() in SomePath...
有人可以帮我解决这个问题吗?
谢谢
PHP 7 中的异常层次结构已更改,如果您查看 set_exception_handler
的 manual 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。