我有一个库,直到有人在GitHub上制造了一个问题,我才注意到它发出了不推荐使用的警告.我已经启用了:

error_reporting(E_ALL);

并修复了所有弃用警告.但问题是:如果有弃用警告,您能让代码总是失败(我想到单元测试)吗?我在考虑使用正则表达式添加ob_个缓冲区,以测试是否没有警告并抛出错误.但这将需要一些看起来不美观的代码.

有没有一种简单的方法,只需切换一些选项,就可以使警告成为真正的错误?所以单元测试不能通过,代码总是失败?我希望我的代码是面向future 的,并且不会在PHP决定用真正的错误替换弃用时失败.

推荐答案

是的,您可以让您自己的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
);

注册它after单元测试框架注册它自己的处理程序or相应地例如根据配置与测试框架通信.查看他们的功能列表,这是上面的纯PHP代码.

Php相关问答推荐

PHP php_mongodb.dll for 32bit

为什么调用干预\映像引发错误驱动程序\GD\Driver not found?

PHP DateInterval天数不一致

向在添加到购物车上动态创建的WooCommerce产品添加发货类别

Laravel数据表在一个视图中传递两个实例

PHP中冒号的奇怪用例

在WooCommerce产品中按类型对产品属性术语进行分类以供显示

在内部API请求之后,在响应客户端之前,是否忘记了PHP中的Header()?

如何将隐式乘法添加到PHPPEG基本计算器语法中?

无法使用php IMAP从Gmail获取收件箱

我的邮箱中的链接在我的URL中添加了一个

如何使用定制的StateProvider设置JsonLd@上下文?

在WooCommerce中以编程方式添加特定产品后,将价格设置为零

重命名 WordPress 中现有的自定义分类法名称和标签

WooCommerce:如果订单总数为零,则隐藏本地取货运输选项

奇怪的 preg_match_all() 行为

将 WooCommerce 0 销售价格替换为自定义文本,并保留常规价格删除线

加载 Xdebug PHP 7.4.0 失败

在帖子内容中使用短代码触发 Woocommerce 挂钩

如何在php中获取大于50的年龄