Symfony ExceptionHandler抛出一个关于它自己的错误

时间:2016-01-06 15:21:40

标签: php symfony exception php-7

我正在升级应用程序以使用Symfony 3和PHP 7.我一直收到此错误。我不确定它源于何处或如何解决它。

  

Symfony \ Component \ Debug \ ExceptionHandler :: handle()必须是Exception的实例

1 个答案:

答案 0 :(得分:8)

TL; DR :代码中的某处会触发PHP错误。在PHP 5中,它被触发为一个简单的PHP错误;在PHP 7中,它被抛出为Error,现在传递给Symfony的异常处理程序。

此错误可能一直存在于您的应用程序中,并且由于error_reportingdisplay_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>