从PHP7.4升级=> PHP8,是否可以忽略某些错误

问题描述 投票:0回答:4

我们有一个巨大的代码库,在访问未定义的变量或数组键时,我们忽略了 php7 的通知。 例如

$somethingThatMayNotExist = $_REQUEST['somethingThatMayNotExist']

PHP8 现在会抛出错误。我知道我们应该始终检查键是否存在,或者变量是否已定义。但代码库太大了,我们的单元测试覆盖率很差,我宁愿切换到 php8 并将这些错误作为通知处理(并将值设置为 null)。 这可以使用某种自定义错误处理程序吗?如果是这样,该怎么做?

php error-handling
4个回答
3
投票

根据 @KikoSoftware 的评论,我通过创建自定义错误处理程序解决了这个问题,并通过记录和合并它们进行重构来忽略这些类型的错误。

set_error_handler(array($this,'handleError'))

public function handleError($code, $message, $file, $line)
{
     if(str_contains($message, 'whatever errormessage should be ignored') {
            // TODO: send mail or log error somewhere for further refactoring
            return null; // php7.4-like behaviour
      }
       
      parent::handleError($code, $message, $file, $line);
}

1
投票

我使用了这个正则表达式查找和替换:

$_REQUEST[(.+)]

($_REQUEST[$1] ?? "")

替换中没有外括号,html 在某些地方会变得混乱。

我使用 Linux Mint Software Manager 中的 Regexxer 来替换多个文件。 Notepadqq 中的正则表达式查找和替换无法正常工作。


0
投票

这适用于拥有大量代码库的人,他们在迁移到更新/更安全/更快的 PHP 版本时受到限制,只是因为未定义的数组键或未定义的变量现在在 PHP 8 中成为警告。

为了抑制 PHP 8 中的未定义警告,我发现了两种主要方法:使用带有 PHP 扩展(一些 C 代码)的自定义错误处理程序或通过 php.ini 在 auto_prepend_file 中设置自定义错误处理程序(php 代码) .

通过这些调整运行代码,直到您有时间修复或重写庞大的代码库。


-2
投票

php8 在非 isset 数组键上创建异常。并且您可以创建全局钩子来处理此异常。

© www.soinside.com 2019 - 2024. All rights reserved.