MENU

PHP8でPHPエラー Notice:  Undefined indexがWarning:Undefined array keyになっていた話

別記事を書くときにきづいたのですが、
PHPの有名なエラーNotice:  Undefined indexがPHP8ではWarning:Undefined array keyになっています。

エラー文も変わっていますが、それに加えなんとエラーレベルが一段階あがっています!

長年PHPをさわってきてはじめてこんな変化がありびっくりしたので今回記事にしました。

目次

PHP7とPHP8でエラーを比較してみる

<?php
echo $_GET["username"];
echo $_GET["age"];
?>


http://localhost/study_php/complete.php?username=karaage&age=11
本来は下線部分のようなパラメータが来ることを想定したコードですが、
パラメータを削除してリクエストをします。

http://localhost/study_php/complete.php

するとKeyがないのでエラーになります。

同じコードでPHP7とPHP8それぞれで実行してみるとエラーの出力内容が異なりました。

※PHP8はWindows、PHP7はMacで動かしているのでエラー出力箇所のパスは異なります。
ご了承ください。

PHP8でのエラー

Warning: Undefined array key “username” in C:\xampp\htdocs\study_php\complete.php on line 2

Warning: Undefined array key “age” in C:\xampp\htdocs\study_php\complete.php on line 3

PHP7でのエラー

Notice: Undefined index: username in /Library/WebServer/Documents/php_study/complete.php on line 2

Notice: Undefined index: age in /Library/WebServer/Documents/php_study/complete.php on line 3

PHPエラー対処方法

サンプルのようにisset関数を使い、変数が定義されている時のみ、アクセスするようにします。
そうするとエラーが表示されなくなります。

<?php

if(isset($_GET['username'])){
    echo $_GET['username'] . "さん"; 
} 

if(isset($_GET['age'])){
    echo $_GET['age'] . "才"; 
}

?>

おまけですが、サンプルのようにisset関数でelseを使いパラメータがない人に向けてオリジナルの文言を出すテクニックもあります。

項目消しちゃうとレイアウト崩れて困る!みたいな時に使うと便利です。

if(isset($_GET['username'])){
    echo $_GET['username'] . "さん"; 
}else{
    "ゲストさん";
} 

おわりに

今回はPHP8からエラー内容が変わった”Warning:Undefined array key”と対処方法について紹介しました。

従来と同じくisset関数を用いてエラーを回避することができます。
エラーは消えたけどレイアウトが崩れて困る!って時はサンプルの通りelse文を使いデフォルトの文を入れることにより解決可能です。
ぜひ試してみてください!

からあげ
個人事業主
SEとして10年ほど大手ECサイトの開発を担当。2022年6月より個人事業主としてプログラミング支援行う予定。今は開業準備中です。
よかったらシェアしてね!
目次
閉じる