既然所有错误都是异常,那么 PHP7 上的 set_error_handler() 会发生什么情况?

2024-01-19

在 PHP5 上,同时拥有这两者是很有意义的set_exception_handler() and set_error_handler()定义的。

然而,在 PHP7 上,所有(大多数?)错误现在都是例外。那么,如果甚至错误都会通过异常处理程序传递,那么定义两个处理程序有什么意义呢?

我看到有一个关于 PHP7 new 的说明Error异常处理程序文档中的类,但没有提到不再有任何简单错误的事实,但是Throwables,在错误处理函数中。

从 PHP 7 开始,大多数错误都是通过抛出异常来报告的Error异常,也将被处理程序捕获。两个都Error and Exception实施Throwable界面。[source] https://www.php.net/manual/en/function.set-exception-handler.php#refsect1-function.set-exception-handler-parameters


Aaron Piotrowski(新错误异常系统的开发者)有一个关于这个的很棒的博客 https://trowski.com/2015/06/24/throwable-exceptions-and-errors-in-php7/。我认为你需要理解的关键点是这一点

在 PHP 7 中,当发生致命且可恢复的错误(E_ERROR and E_RECOVERABLE_ERROR)发生,而不是停止脚本执行。在某些情况下,致命错误仍然存​​在,例如内存不足,并且仍然像以前一样立即停止脚本执行。未捕获的异常在 PHP 7 中也将继续是致命错误。这意味着,如果从 PHP 5.x 中致命的错误引发的异常未被捕获,那么它在 PHP 7 中仍然是致命错误。

请注意,其他类型的错误(例如警告和通知)在 PHP 7 中保持不变。只有致命错误和可恢复错误才会引发异常。

用不同的方式来考虑这个

  • set_exception_handler()- 处理函数Exception默认情况下(从 PHP 7.0 开始,这可以处理所有Throwables,因此它可以捕获可恢复的错误)
  • set_error_handler()- 处理可恢复错误的功能

换句话说,它们的功能没有改变。任何在 PHP5 中触发它们的东西都会在 PHP7 中触发它们,只是现在,您可以使用try-catch在脚本级别阻止以处理特定错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

既然所有错误都是异常,那么 PHP7 上的 set_error_handler() 会发生什么情况? 的相关文章

  • 包括 PHPUnit 在内的麻烦

    我想开始为我的代码编写测试 因此我使用以下命令安装了最新的 PHPUnit wget http pear phpunit de get phpunit phar chmod x phpunit phar mv phpunit phar us
  • WordPress 中的 jQuery.post()

    我目前正在为 Wordpress 编写一个聊天框插件 该插件使用 jQuery post 方法将数据发送到 php 文件 以便将输出写入 html 文件 该文件又将使用 jQuery 加载到聊天窗口 在我用来将聊天日志写入html文件的ph
  • PHP、jQuery Ajax 和 json 跨域返回

    我的 php 编码页面位于一台返回 json 结果的服务器上 php 文件名为 getInfoData php 返回如下 echo json encode v 不 我可以使用 getJSON 读取 json 并在同一服务器上运行它 但我需要
  • 如何覆盖 suhosin 最大值?

    suhosin 正在过滤一个重要的 GET 参数 当以下方法不起作用时 如何覆盖 suhosin public html php ini suhosin suhosin get max value length 2048 将 suhosin
  • 如何使用 HHVM proxygen 重写规则忽略任何文件?

    我创建一个这样的文件example ini hhvm server type proxygen hhvm server default document index php hhvm virtual host default rewrite
  • 莫名其妙的 MissingFieldException

    在下面的代码片段中 它会抛出 MissingFieldException Field Not Found DepthBidLevels 异常 但仅在下面描述的某些奇怪情况下才会抛出 for int i DomSize 1 i gt 0 i
  • 断开连接期间处理 pyserial 中的异常

    我有从串口读取数据的代码 try dataIn self port read 100 except serial SerialException do some work return None 如果我断开设备连接 我会捕获我无法处理的异常
  • 在 Java 中重新抛出异常而不丢失堆栈跟踪

    在 C 中 我可以使用throw 语句重新抛出异常 同时保留堆栈跟踪 try catch Exception e if e is FooException throw Java中有没有类似的东西 不会丢失原始堆栈跟踪 catch Whate
  • 如何在 Laravel 中编写联合查询?

    我正在使用 laravel 5 0 并且我有 mysql 查询 SELECT surat masuk id surat surat masuk nomor surat FROM surat masuk WHERE EXISTS SELECT
  • Kohana_Exception [ 0 ]:需要有效的 cookie salt。请设置 Cookie::$salt

    我正在学习本教程 http kowsercse com 2011 09 04 kohana tutorial beginners http kowsercse com 2011 09 04 kohana tutorial beginners
  • 执行数组内的函数

    是否可以从数组内部执行匿名函数 也在数组内部定义 return execute function logic 或者我应该在外面定义它然后再调用它 从技术上讲 您可以将该函数括在括号中并像这样调用它 return function retur
  • 显示过去 7 天 PHP 的结果

    我想做的是显示过去 30 天的文章 但我现有的代码不断给我一个 mysql fetch assoc 错误 然后追溯到我的查询 这是代码 sql mysql query SELECT FROM table WHERE DATE datetim
  • 返回吃异常

    我至少发现了以下行为weird def errors try ErrorErrorError finally return 10 print errors prints 10 It should raise NameError name E
  • zend 模块特定配置问题

    我使用 zend 框架构建 REST Web 服务 并且使用模块来分隔我的 api 版本 现在 我想为每个模块 v1 和 v2 都有一个单独的配置文件 主要用于指定单独的数据库连接 我有这样的目录结构 application modules
  • Zend Framework 2 将变量传递给模型

    我目前正在开发一个多语言网站 对于多语言部分 我使用翻译器 poedit 我将所选语言存储在会话中 效果很好 模块 php public function onBootstrap MvcEvent e session new Contain
  • 何时以及为何应使用 $_REQUEST 而不是 $_GET / $_POST / $_COOKIE?

    标题中的问题 当所有 3 个都发生时会发生什么 GET foo POST foo and COOKIE foo exist 其中哪一个被包含到 REQUEST 我想说永远不会 如果我想通过各种方法设置某些内容 我会为每个方法编写代码以提醒自
  • 为 SimpleXMLElements 数组编写 foreach 循环

    我正在使用 PHP 5 中的 XPath 来解析 XML 文档 我遇到的问题是写一个foreach正确显示以下数组 XML 文档示例 值1 值2 xmlfile link to file xml xmlRaw file get conten
  • 从数据库生成 XML 时出现 PHP 编码错误 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试获取一个简单的 PHP 服
  • 从 CodeIgniter 中的 URL 捕获哈希值 (#)

    我有一个看起来像的网址 mysite com transactions view 123456 效果很好 但是我的客户现在希望在 url 中包含 hashbang mysite com transactions view 123456 现在
  • php 打印 aa aaa ab aab 直到 zzz 的算法

    你好 我需要打印从 a 到 zzz 最多 3 个字母 例如我的输出应该是 A B Z AA AB AZ BA BB ZZ AAA AAB ZZZ 我在过去的 5 个小时里努力尝试 我找不到任何逻辑 我尝试了下面的代码 PHP 有一个方便的功

随机推荐