web-dev-qa-db-ja.com

メッセージ:タイプnullの値で配列オフセットにアクセスしようとしています

このエラーは、数年前から使用しているスクリプト(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リポジトリからファイルを上書きしただけではエラーは修正されませんでした。

4
vespino

これは、$cOTLdataはnullではありませんが、インデックス'char_data' 存在しません。 PHPの以前のバージョンは、そのような間違いに対してそれほど厳密ではなく、7.4がこれを行わない間、静かにエラー/通知を飲み込んでいた可能性があります。

インデックスが存在するかどうかを確認するには、 isset() を使用できます。

isset($cOTLdata['char_data'])

つまり、行は次のようになります。

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

=== nullは本質的にはissetが既に行っているものです(ただし、正の場合)ので、三項演算子のthenとelseのケースを切り替えました。

7
ArSeN