我正在升级应用程序以使用Symfony 3和PHP 7.我一直收到此错误。我不确定它源于何处或如何解决它。
Symfony \ Component \ Debug \ ExceptionHandler :: handle()必须是Exception的实例
答案 0 :(得分:8)
TL; DR :代码中的某处会触发PHP错误。在PHP 5中,它被触发为一个简单的PHP错误;在PHP 7中,它被抛出为Error
,现在传递给Symfony的异常处理程序。
此错误可能一直存在于您的应用程序中,并且由于error_reporting
或display_errors
设置而被吞下。
错误处理机制在PHP 7中发生了变化。错误现在作为Error
类的实例抛出,并且可以被异常处理程序捕获。有关详细信息,请参阅the documentation:
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错误。< / p>