Ric*_*ich 14 php error-handling
当我运行"Behat"步骤时,Behat错误处理程序将"尝试获取非对象属性"错误转换为异常.
这非常有用,因为它会将步骤标记为失败,并允许测试运行在下一个场景中继续.
但是,"对非对象调用成员函数"错误是致命的,并立即停止测试执行(包括中止将结果写入xml).这是无益的.
我的问题是:
这两个错误有什么区别?它们是不同的"错误级别"吗?记录在哪里?我搜索过PHP网站和Google,并且找不到规范的参考,只是关于调试每个错误的特定实例的很多问题.
有没有办法将后一个错误转换为异常,而不是完全停止脚本?在我看来,null用" ->" 取消引用" " 将是一个"无法恢复,例如内存分配问题"的错误.
更新:
看起来这只是PHP的一个已知问题.看到:
有人说这是"按设计",但我认为这只是在将对象添加到PHP之前定义的错误级别的假象.在一个非OO语言中,调用一个不存在的函数是一个严重的错误,我可以看到它如何被描述为"致命"或"不可恢复"(尽管,在非OO语言中,函数可以定义在即时,即使看起来过于悲观).现在,既然你可以$a->f()对任何旧版本做" " $a,那么" f"可能不存在的可能性更大,而且它似乎不应该是一个致命错误(参见Java,这将是一个NullPointerException).
我想这会引出一个新问题:
_ 3.如何修补PHP以使"对非对象的成员函数调用"错误非致命,而不会大幅破坏向后兼容性,以及您可以采取哪些步骤来最大化该补丁被PHP接受的可能性?
更新2重新修补PHP:
在PHP内部邮件列表中有一些有限的支持来进行此修复.现在我只需编写补丁来修复此问题并创建RFC.
PHP 7 中已修复此问题:
在 PHP 7+ 中,此代码现在将抛出异常,而不是导致不可恢复的致命错误。
| 归档时间: |
|
| 查看次数: |
5745 次 |
| 最近记录: |