当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《SymfonyExceptionHandler抛出一个关于它自己的错误》经验,为你挑选了1个好方法。

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

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

helmbert.. 8

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

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



1> helmbert..:

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

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

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有