PHP中出现弃用警告时如何触发错误?

oxiaedzo  于 11个月前  发布在  PHP
关注(0)|答案(2)|浏览(112)

我有一个库,直到有人在GitHub上创建了一个问题,我才注意到它发出了弃用警告。

error_reporting(E_ALL);

字符串
并修复了所有的弃用警告。但问题是:如果有弃用警告,你能让代码总是失败吗(我想到了单元测试)?我在想也许可以添加ob_缓冲和正则表达式来测试是否没有警告并抛出错误。但这需要一些看起来不太漂亮的代码。
有没有一种简单的方法来切换一些选项来使警告成为真实的错误?所以单元测试不通过,代码总是失败?我希望我的代码是面向未来的,当PHP决定用真实的错误替换弃用时不会失败。

9q78igpj

9q78igpj1#

但问题是:你能让代码总是失败吗(我想到单元测试)
使用<phpunitfailOnDeprecation="true">属性,当测试期间发生弃用(E_DEPRECATEDE_USER_DEPRECATED或PHPUnit弃用)时,PHPUnit在标准测试运行器中显示D
这将使它总是失败。
命令行选项也存在,来自phpunit --help调用:
| 开关|描述|
| --|--|
| ‑‑display‑deprecations个| * “显示测试触发的弃用详细信息”。查看每个D背后的内容。|
| ‑‑fail‑on‑deprecation| * “Signal failure using shell exit code when a deprecation was triggered”
.这与上面的failOnDeprecation XML属性等效。|
| ‑‑stop‑on‑deprecation个| * “Stop after first test that triggered a deprecation”*.快速失败。这是stopOnDeprecation XML属性。|
不是在(你的)PHP语言弃用的情况下,但也许值得注意的是未来的访问者:
PHPUnit不填充有关@的信息-抑制触发的E_USER_DEPRECATED错误。Xdebug扩展的ini设置的命令行参数(非PHPUnit)。正确设置xdebug.mode,对于xdebug.scream,必须启用development helpers²-d xdebug.mode=develop,通常为默认值)。如果PHPUnit还需要Xdebug的其他功能,例如codecoverage,请在模式后面添加逗号(“,”)。更多信息请参见Xdebug文档。

  1. failOnDeprecation属性- PHPUnit 5. XML配置文件
  2. Development Helpers — Xdebug: Documentation
mlmc2os5

mlmc2os52#

是的,你可以让你自己的PHP脚本处理所有(可处理的)错误,包括E_DEPRECATED/E_USER_DEPRECATED,通过你自己的错误处理函数将它们转换为异常。
参见PHP's set_error_handler() function。它允许你定义一个自定义的错误处理程序,每当错误发生时就会被调用(默认为E_ALL级别,不包括一些致命的核心错误,并忽略这样的处理程序,在其手册页面上有明确的说明)。

set_error_handler(
    function($errno, $errstr, $errfile, $errline) {
       throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
    },
    E_DEPRECATED | E_USER_DEPRECATED
);

字符串
在 * 单元测试框架注册了它自己的处理程序之后注册它,或者相应地与测试框架进行通信,例如根据配置。请参阅他们的功能列表,上面是纯PHP代码。

相关问题