php 关闭警告:尝试访问类型为null的值的数组偏移量

ifsvaxew  于 2023-10-15  发布在  PHP
关注(0)|答案(2)|浏览(189)

自从从php 5升级到8,我开始收到很多“警告:当使用mysqli_fetch_array运行查询时,试图访问null类型值的数组偏移量,这些查询可能会也可能不会返回任何结果(如果它们不返回也没关系!).
我明白为什么会发生这种情况,并且已经看到各种线程建议在尝试使用它之前只测试结果,这对于单个示例来说非常好。但是我有很多关于这个问题的页面,可能还有很多我还没有找到。因此,我正在寻找的是一种方法来阻止错误的出现,而不是编辑每个页面。
最明显的方法似乎是如果我可以禁用该特定警告.不确定这是否可能?

dbf7pr2w

dbf7pr2w1#

不要忽视错误。PHP通过抛出警告来提供帮助。您应该将每个警告视为错误或编码错误。它们不容忽视。
最近的PHP版本改进了错误报告。如果您现在才知道这些错误,那么是时候在发布产品的新版本之前修复它们了。如果无法找到出现这些警告的所有位置,请监视错误日志一段时间,并修复出现此警告的所有示例。
不要试图禁用警告!

5vf7fwbs

5vf7fwbs2#

您可以定义一个自定义错误处理程序来拦截该特定警告并忽略它。

set_error_handler(
    static fn (int $errno, string $errstr): bool =>
        $errstr === 'Trying to access array offset on value of type null'
);

自定义错误处理程序应该返回true(如果它们已经处理了错误)和false(如果错误应该传递给本机错误处理程序)。这个处理程序基本上只是假装处理这个非常具体的警告,并将其他所有内容传递给默认处理程序。
工作示例:https://3v4l.org/SgZ7f0

***这不是一个永久的解决办法。有志者事竟成,但这条路就是疯狂。

像这样的东西的 * 唯一 * 可能的用例是OP的确切用例:当从PHP 5升级到PHP 8时,你会被错误,警告和通知轰炸。如果一个特定的警告出现了成百上千次,你可能想暂时隐藏它,这样你就可以专注于修复其他更重要的警告。
但这并不意味着你不应该解决这个问题:这是一个警告级别的事件是有原因的。您的代码可能会以意想不到的方式运行,这可能会在未来的PHP版本中成为CLR级别的事件。
保留这个错误处理程序来隐藏警告意味着您不再意识到这个问题,当您升级到一个新的PHP版本时,一条更大的龙会咬你,这种情况现在是一个错误。
在最好的情况下,此错误处理程序仅在生产环境中实现,因此其硬盘驱动器不会充满警告日志,而在开发环境中,此错误处理程序不存在,因此开发人员将面临这些警告作为修复问题的提醒。

相关问题