提问人:A1Dan 提问时间:10/12/2023 最后编辑:ADysonA1Dan 更新时间:10/12/2023 访问量:151
关闭警告:尝试访问 null 类型值的数组偏移量
Turn off Warning: Trying to access array offset on value of type null
问:
自从从 php 5 升级到 8 以来,我开始收到很多“警告:尝试访问 null 类型值的数组偏移量”,当使用 mysqli_fetch_array 运行查询时,这些查询可能会或可能不会返回任何结果(如果它们不返回也没关系!
我明白为什么会发生这种情况,并且看到各种线程建议在尝试使用它之前只测试结果,这对于个别实例非常有用。但是我有很多关于这个问题的页面,可能还有很多我还没有找到。因此,我正在寻找一种阻止错误的方法,而不是编辑每个页面。
执行此操作的明显方法似乎是,如果我可以禁用该特定警告......不确定这是否可行?
答:
您可以定义自定义错误处理程序来拦截该特定警告并忽略它。
set_error_handler(
static fn (int $errno, string $errstr): bool =>
$errstr === 'Trying to access array offset on value of type null'
);
如果自定义错误处理程序已处理错误,并且应将错误传递给本机错误处理程序,则应返回。这个处理程序基本上只是假装处理那个非常具体的警告,并将其他所有内容传递给默认处理程序。true
false
编辑:需要明确的是:这不是一个永久的解决方案。有志者事竟成,但这种方式就是疯狂。
唯一可能的用例是 OP 的确切用例:当从 PHP 5 升级到 PHP 8 时,您将受到错误、警告和通知的轰炸。如果特定警告出现数百次或数千次,您可能希望暂时隐藏它,以便您可以先专注于修复其他更重要的警告。
这并不意味着你不应该解决这个问题:这是一个警告级别的事件是有原因的。您的代码可能以意想不到的方式运行,这可能会在将来的 PHP 版本中成为 ERROR 级别的事件。
保留此错误处理程序来隐藏警告意味着您不再意识到问题,并且当您升级到更新的 PHP 版本时,一条更大的龙会咬您,这种情况现在是一个错误。
在最好的情况下,此错误处理程序仅在生产环境中实现,因此其硬盘驱动器不会被警告日志填满,而在开发环境中,此错误处理程序不存在,因此开发人员会遇到这些警告作为解决问题的提醒。
评论
不要忽略错误。PHP 通过抛出警告来提供帮助。您应该将每个警告视为错误或编码错误。它们不容忽视。
最近的 PHP 版本改进了错误报告。如果您现在才知道这些错误,那么是时候在发布新版本的产品之前修复它们了。如果找不到出现这些警告的所有位置,请监视错误日志一段时间,并修复出现此警告的所有实例。
不要寻求禁用警告的方法!
评论
@