
PHPの勉強をしています。
先日ローカル環境のPHPを8に変更したのですが、その際今まで発生したいなかったWarningが沢山表示されて困っております、大きく仕様が変わったのでしょうか…。
アドバイスを頂けますと幸いです。
例えばメールフォームで今まで以下のように記述していたのですが、
<?php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$error = [];
if ($_POST["lastName"] === "") {
$error["lastName"] = "blank";
}
}
?>
<form action="" method="post">
<fieldset>
<legend>お名前</legend>
<label>姓
<input type="text" name="lastName" value="<?php echo $_POST["lastName"]; ?>">
<span class="require">
<?php if ($error["lastName"]==="blank") {
echo "※お名前を入力してください。";
}
?>
</span></label>
<input type="submit" value="送信する">
</form>
しょっぱなからエラーが表示されます。
Warning: Undefined variable $error in E:\xampp\htdocs\index.php on line 45
Warning: Trying to access array offset on value of type null in E:\xampp\htdocs\index.php on line 45
遷移先の同ページで$_POSTを受け取った際にも以下のエラーが表示されます。
Warning: Undefined array key "lastName" in
調べてみると回避策として、isset()を指定するようなことがか書かれているのですが、色々と試してみるのですがうまく設定ができません。
ちなみに、error_reporting(E_ERROR | E_PARSE | E_NOTICE); でエラーを無視すると意図する動きをしてくれるのですが、そもそもきちんとした書き方ができていないからエラーが出ていると思うので、この辺り正しい書き方で対応したいと思っております。
アドバイスのほど宜しくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
php8 では以下が警告になります
* 未定義の変数を読み取ろうとした場合 → Undefined variable
* 未定義の配列のキーを読み取ろうとした場合 → Undefined array key
未定義の変数やキーが無くなる様に、プログラムを修正しましょう
例1)
条件によっては使わなくても、変数は必ず定義して初期化する
if (条件) { $error = []; }
↓
$error = [];
例2)
条件によっては値が無くても、キーは必ず定義して初期化する
if (条件) { $error["lastName"] = "blank"; }
↓
$error["lastName"] = (条件)? "blank": "";
例3)
どうしてもキーが無い状況があり得るなら、存在確認を事前に行う
if ($error["lastName"]==="blank")
↓
if ( isset($error["lastName"]) && $error["lastName"]==="blank" )
参考) 存在確認の手段候補
https://www.php.net/manual/ja/function.isset.php
https://www.php.net/manual/ja/function.array-key …
余談ではありますが、
php9 では警告ではなくエラーと判断されてしまう様です
面倒くさがらずにプログラム見直しをしましょう
https://wiki.php.net/rfc/undefined_variable_erro …
有難うございます!!
とても有益な情報有難うございます。
アドバイス頂きました内容を全て今は理解できておりませんが、とても的確なアドバイスを頂けていると感じております。有難うございます。
>>余談ではありますが、
>>php9 では警告ではなくエラーと判断されてしまう様です
有賀王御座います。
本当、ご指摘頂いた通りと認識しております。
なので、エラー回避などではなく、きちんと丁寧な記述ができるよう今回質問をさせて頂いた次第です。
ご連絡頂きました内容、1つ1つ確認して確実に理解したいと思います。
このような素人の質問に的確なアドバイスを頂きまして大変感謝申し上げます、有難う御座います。mm
No.1
- 回答日時:
下記に仕様変更で使えなくなった内容が書いているので、警告が表示された行と照らし合わせて修正して下さい。
https://www.php.net/manual/ja/migration80.incomp …
めんどくさいなら、PHP7に戻しましょう。
有難うございます。
まだPHPの8は使うには早いのかもしれませんね…。
ただ、書き方が緩いという認識はありましたので、これを機会にもう少し厳格な書き方を勉強したいと思いました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数の引数に未定義の変数を渡...
-
ある条件に当てはまったときに...
-
\\x00 でエラー
-
正規表現での最後尾のバックス...
-
phpでクラスのメソッドで同名の...
-
トランザクションが原因?DBに...
-
file_get_contents使用時のエラ...
-
Localeクラスについて
-
PHPで特定のURLにジャンプす...
-
PHPで、エラーがない場合のみ画...
-
これは例外処理でしょうか?
-
フォントの色を変えるには?
-
日本語をGETで渡す場合UR...
-
PHPでネットワークドライブのop...
-
awsにApacheとPHPを入れて、何...
-
検索プログラムの作成
-
PHPのif文でその処理を途中で抜...
-
FTPコマンドでディレクトリごと...
-
*.php、*.php3、*.phtmlの違い
-
Subversionのリポジトリの削除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フォントの色を変えるには?
-
PHPでfatal errorが出ても無視...
-
PHP8を使うと、大量のWarningが...
-
PHPで、エラーがない場合のみ画...
-
トランザクションが原因?DBに...
-
phpでお問い合わせフォームを作...
-
PHPで特定のURLにジャンプす...
-
try~catch構文は、どういうメ...
-
ある条件に当てはまったときに...
-
PHPでネットワークドライブのop...
-
SELECTの値を保持する
-
PHP、unpack関数でのエラー
-
functionに括弧を使用するとエラー
-
iframeからのアクセスか、ブラ...
-
phpの質問です
-
外部のHTMLに書かれた文字を取...
-
E_NOTICEでも処理を止められま...
-
日本語をGETで渡す場合UR...
-
エラーが出ない
-
「@$変数」の「@の意味は?」
おすすめ情報