我有一个库,直到有人在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:从数组中获取唯一的数字组合

ForHumans函数中的月当量与单位限制

使用列入黑名单的单词和自定义业务逻辑的组合将特定的子字符串包装在HTML标记中

按与WooCommerce管理顺序列表中的特定字符串不匹配的特定元值筛选订单

WordPress插件和JSON不是有效的响应错误

PHP根据特定索引值从中删除子数组

Codeigniter 4中的未定义变量$HOME

在WooCommerce存档页面中显示可变产品的库存变化属性

用ajax获取文件 - CORS问题&;设置缓存?

在WooCommerce循环中添加子类别和产品之间的分隔符

Regex|PHP捕获json字符串中的每个非法双引号

Shopware 6 插件:如何删除/迁移布尔配置到多选配置

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

根据页面以及是否在促销,向 WooCommerce 中显示的价格添加前缀

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

WooCommerce 订单和邮箱通知的自定义产品描述

Composer自动加载器重复了子类的类文件路径

PHP Symfony 在测试.env文件中将接口自动装配作为构造函数参数,但使用接口的特定类

如何在不解压缩/重新压缩的情况下连接(连接)两个缩小的值

如何正确使用Flysystem和Local Adapter