我正在升级应用程序以使用Symfony 3和PHP 7.我一直收到此错误.我不确定它源于何处或如何解决它.
Symfony\Component\Debug\ExceptionHandler :: handle()必须是Exception的一个实例
helmbert.. 8
TL; DR:在代码中的某处触发PHP错误.在PHP 5中,它被触发为一个简单的PHP错误; 在PHP 7中,它被抛出Error
,现在它被传递到Symfony的异常处理程序中.
此错误可能一直存在于您的应用程序中,并且由于error_reporting
或display_errors
设置而被吞下.
错误处理机制在PHP 7中已更改.错误现在作为Error
类的实例抛出,并且可以由异常处理程序捕获.有关更多信息,请参阅文档:
PHP 7改变了PHP报告大多数错误的方式.不是通过PHP 5使用的传统错误报告机制报告错误,而是通过抛出错误异常来报告大多数错误.
与正常的例外情况一样,这些
Error
异常会在到达第一个匹配的catch块之前冒泡.如果没有匹配的块,则将set_exception_handler()
调用安装的任何默认异常处理程序,如果没有默认的异常处理程序,则异常将转换为致命错误,并将像传统错误一样处理.
但是,请注意Error
该类不会扩展Exception
该类(但它们都实现了Throwable
接口).
由于Symfony异常处理程序使用该set_exception_handler
方法注册为异常处理程序,因此将Error
在代码中抛出所有类型的未捕获实例来调用此处理程序,但无法处理它们,因为它期望Exception
按类型提示.
目前,您可以通过实现自己的ExceptionHandler(您可以使用它而不是Symfony)来实现一个handle(Throwable $error)
函数来解决这个问题,从而可以捕获PHP错误.
TL; DR:在代码中的某处触发PHP错误.在PHP 5中,它被触发为一个简单的PHP错误; 在PHP 7中,它被抛出Error
,现在它被传递到Symfony的异常处理程序中.
此错误可能一直存在于您的应用程序中,并且由于error_reporting
或display_errors
设置而被吞下.
错误处理机制在PHP 7中已更改.错误现在作为Error
类的实例抛出,并且可以由异常处理程序捕获.有关更多信息,请参阅文档:
PHP 7改变了PHP报告大多数错误的方式.不是通过PHP 5使用的传统错误报告机制报告错误,而是通过抛出错误异常来报告大多数错误.
与正常的例外情况一样,这些
Error
异常会在到达第一个匹配的catch块之前冒泡.如果没有匹配的块,则将set_exception_handler()
调用安装的任何默认异常处理程序,如果没有默认的异常处理程序,则异常将转换为致命错误,并将像传统错误一样处理.
但是,请注意Error
该类不会扩展Exception
该类(但它们都实现了Throwable
接口).
由于Symfony异常处理程序使用该set_exception_handler
方法注册为异常处理程序,因此将Error
在代码中抛出所有类型的未捕获实例来调用此处理程序,但无法处理它们,因为它期望Exception
按类型提示.
目前,您可以通过实现自己的ExceptionHandler(您可以使用它而不是Symfony)来实现一个handle(Throwable $error)
函数来解决这个问题,从而可以捕获PHP错误.