エラーコード辞典

🚨 php-undefined-index PHP Warning: Undefined array key

配列に存在しないキーへアクセスした

原因

`$_POST["name"]` のように、フォーム未送信時や入力欄が無い時にアクセスすると発生します。PHP 8.0 以降は Warning となり、以前の Notice より目立ちます。 設定配列や API レスポンスの不存在キーへのアクセスでも同種の警告が出ます。

なぜ起きるか (内部仕組み)

PHP 7 までは Notice (= 控えめ) だった同種の問題が PHP 8 以降は Warning (= 開発時に必ず目につくレベル) に格上げされました。 これは「曖昧なキーアクセスは隠れたバグの温床」 という方針転換です。 production 環境では Warning が画面に出ると一般ユーザーにも見えてしまうため、 必ず存在チェック または null 合体演算子を使う設計に変えます。

よくあるシナリオ

1. お問い合わせフォームを GET で開いた状態で `$_POST["name"]` を読む。 2. checkbox 未チェック状態では `$_POST` にキーが入らないことを忘れている。 3. JSON API のレスポンスで optional フィールドがある場合の参照。 4. config 配列の存在しないキー読み出し。

対処方法

`isset($_POST["name"]) ? $_POST["name"] : ""` または PHP 7.0+ なら `$_POST["name"] ?? ""` で null 合体演算子を使います。 配列が深い場合 (= PHP 8.0+) は `$config["db"]["host"] ?? "localhost"` のようにネスト可能です。 array_key_exists() は値が null の場合にも true を返すため、 「存在を確かめたいが値の有無は問わない」 場面で使い分けます。

再発防止 / 予防策

フォーム受信は専用の入力サニタイザクラス (= e.g. PhpInputSanitizer) でまとめて処理し、 直 `$_POST` 参照を抑える + Psalm/PHPStan で配列キーアクセスを静的検証するのが王道です。