【问题标题】:Message: Trying to access array offset on value of type null [duplicate]消息:尝试访问 null 类型值的数组偏移量 [重复]
【发布时间】:2019-12-14 16:22:51
【问题描述】:

我已经使用了几年的脚本(invoiceplane)中多次出现此错误,但不幸的是其创建者并未对其进行维护:

Message: Trying to access array offset on value of type null

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

这是给出错误的那一行:

$len = $cOTLdata['char_data'] === null ? 0 : count($cOTLdata['char_data']);

$cOTLdata 被传递给函数:

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

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

【问题讨论】:

  • 改成$len = count($cOTLdata['char_data'] ?? []);
  • 我也遇到了同样的崩溃;我通过移动到 mpdf8 来修复它(我认为是版本号)

标签: php php-7.4


【解决方案1】:

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

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

isset($cOTLdata['char_data'])

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

$len = isset($cOTLdata['char_data']) ? count($cOTLdata['char_data']) : 0;

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

【讨论】:

  • 似乎合乎逻辑,打了自己一巴掌,以为自己能想到这一点。昨晚责备,已经很晚了:) 改变所有这些事件将是一项艰巨的工作,但比转移到另一个系统要好。我将首先测试一次。谢谢。
  • 我有这个错误我不明白你的解释
  • @kipruto 如果您没有找到满意的答案,您可以随时提出新问题。但是请注意,即使这也被标记为重复,因为这是一个相当常见的问题,所以阅读其他答案可能是一个很好的第一步。
  • @kipruto 更改为 php7.2 可修复此错误
  • 我强烈建议不要使用 not supported anymore 的旧 PHP 版本,就像 7.2 的情况一样。
猜你喜欢
  • 2021-07-23
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-16
  • 2021-01-09
  • 2020-09-08
相关资源
最近更新 更多