別記事を書くときにきづいたのですが、
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文を使いデフォルトの文を入れることにより解決可能です。
ぜひ試してみてください!