PHPで配列要素へのアクセスとして,以下の記法が存在していた。$foo[bar]しかし,この記法がどうやらPHPのバージョンによって,エラー出力レベルが変わるようで,新しいPHPだと問題になるようだ。気になったので,この記法について調べた。原因この$foo[bar]の記法については,PHP公式マニュアルで解説されている。PHPの変数は$の前置が必須であり,リテラル値以外で$が前置されていない場合,定数か関数とみなされる。そのため,$foo[bar]のbarは丸括弧が欠落しているため,定数とみなされる。ここで,barが未定義の場合,配列の添字が空となり,エラーが予想される。('bar')とみなされる。Manualそのため,$foo[bar]の記法が成立していた。7.2.0未満まではE_NOTICEレベルのエラーが出力されていた。7.2.0からエラーレベルがE_WARNINGに格上げとなった。このことは,上記の他にPHPの7.2での変更点としても明記されている。7.2.0以上でこのエラーを抑制したい場合,以下のように既定のエラーレベルに加えて,E_WARNINGのエラーをphp.iniのerror_reportingプロパティやerror_reporting関数で設定すればいい。8.0.0からはエラー例外を出すことが予告されている。したがって,未定義定数を使った$foo[bar]の記法はやめ,素直にリテラル文字列を使った$foo['bar']や$foo["bar"]の記法を採用すべきだろう。再現この問題を再現・検証するコードを以下に掲載する。GitHubにも掲載している。記法によるエラー出力の違いを記す。7.2.0以上ではE_WARNINGのエラーが出力される。E_WARNINGは既定のエラーレベルに存在するため,今まで問題なかったPHPコードが,PHPのバージョンアップにより,問題を出すようになった。7.2.0以上の場合,既定のエラーレベルに存在するE_WARNINGにより,ここで以下のエラーが出力される。7.2.0未満の場合,E_NOTICEの有効により,ここで以下のエラーが出力される。よるエラー出力を抑制できる。記法はエラー扱いになることが予告されているので,この対応は悪い。よるエラー出力の違いを検証した。PHPは勉強を初めたばかりで,今回のような挙動がなぜ発生するのか,知らなかった。疑問に思い調べたことで,PHPの未定義定数の使用という原因がわかった。疑問を解消できて勉強になった。PHPはいろんなところで使われているので,バージョン間の違いが問題になりやすい。コメントをキャンセルメールアドレスが公開されることはありません。TOPMENUPostProductPublicBookFoodMTGSocialContact。