【问题标题】:Symfony ExceptionHandler throwing an error about itselfSymfony ExceptionHandler 抛出一个关于自身的错误
【发布时间】:2016-01-06 15:21:40
【问题描述】:

我正在升级应用程序以使用 Symfony 3 和 PHP 7。我不断收到此错误。我不确定它来自哪里或如何解决它。

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

【问题讨论】:

  • 您需要提供堆栈跟踪或导致此错误的代码以获得任何帮助。
  • 堆栈跟踪:#0 [内部函数]:Symfony\Component\Debug\ExceptionHandler->handle(Object(Error)) #1 {main} 在 /Applications/MAMP/htdocs/upgrade/ 中抛出vendor/symfony/symfony/src/Symfony/Component/Debug/ExceptionHandler.php 第 67 行

标签: php symfony exception php-7


【解决方案1】:

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

此错误可能一直存在于您的应用程序中,并且由于error_reportingdisplay_errors 设置而被吞没。


在 PHP 7 中更改了错误处理机制。错误现在作为 Error 类的实例抛出,并且可以被异常处理程序捕获。更多信息请见the documentation

PHP 7 改变了 PHP 报告大多数错误的方式。不再通过 PHP 5 使用的传统错误报告机制报告错误,现在大多数错误都是通过抛出 Error 异常来报告的。

与普通异常一样,这些Error 异常会冒泡,直到它们到达第一个匹配的catch 块。如果没有匹配的块,则任何使用set_exception_handler() 安装的默认异常处理程序将被调用,如果没有默认异常处理程序,则异常将转换为致命错误并像传统错误一样处理。

但是,请注意Error 类没有扩展Exception 类(不过它们都实现了Throwable 接口)。

由于 Symfony 异常处理程序是使用 set_exception_handler 方法注册为异常处理程序的,因此该处理程序将被调用,并在您的代码中抛出各种未捕获的 Error 实例,但无法处理它们,因为它需要一个 @ 987654334@ 根据其类型提示。

目前,您可以通过实现自己的 ExceptionHandler(然后您可以使用它来代替 Symfony 的)来解决这个问题,该 ExceptionHandler 实现了 handle(Throwable $error) 函数,还允许您捕获 PHP 错误。

【讨论】:

  • 但我无法扩展 ExceptionHandler,因为类中的所有内容都是“私有的”:/ ... Symfony 3.4 有不同的解决方案吗?
猜你喜欢
  • 2017-06-09
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 2012-10-06
  • 2011-02-21
相关资源
最近更新 更多