消息:尝试访问类型为 null 的值的数组偏移量

ves*_*ino 58 php php-7.4

我在脚本(发票平面)中多次遇到此错误,我已经使用了几年,但不幸的是它的创建者没有维护它:

Message: Trying to access array offset on value of type null
Run Code Online (Sandbox Code Playgroud)

我的服务器已升级到 PHP 7.4,我正在寻找一种方法来解决问题并自己维护脚本,因为我对它非常满意。

这是给出错误的行上的内容:

$len = $cOTLdata['char_data'] === null ? 0 : count($cOTLdata['char_data']);
Run Code Online (Sandbox Code Playgroud)

$cOTLdata 传递给函数:

public function trimOTLdata(&$cOTLdata, $Left = true, $Right = true)
{
    $len = $cOTLdata['char_data'] === null ? 0 : count($cOTLdata['char_data']);
    $nLeft = 0;
    $nRight = 0;
    //etc
Run Code Online (Sandbox Code Playgroud)

顺便说一句,它包含在mpdf 中,但简单地覆盖 github 存储库中的文件并不能修复错误。

ArS*_*SeN 85

发生这种情况是因为$cOTLdata它不为空但索引'char_data'不存在。以前版本的 PHP 可能对此类错误不那么严格,并且默默地吞下了错误/通知,而 7.4 不再这样做了。

要检查索引是否存在,您可以使用isset()

isset($cOTLdata['char_data'])
Run Code Online (Sandbox Code Playgroud)

这意味着该行应如下所示:

$len = isset($cOTLdata['char_data']) ? count($cOTLdata['char_data']) : 0;
Run Code Online (Sandbox Code Playgroud)

注意我切换了三元运算符的 then 和 else 情况,因为 === null 本质上是 isset 已经做的(但在积极的情况下)。

  • 我有这个错误我不明白你的解释 (3认同)
  • 我强烈建议不要使用[不再支持](https://www.php.net/supported-versions.php) 的旧 PHP 版本,就像 7.2 的情况一样。 (3认同)
  • 我认为这是不正确的。如果索引不存在,您将得到“未定义索引”。该错误意味着该变量为空。 (3认同)