アプリ版:「スタンプのみでお礼する」機能のリリースについて

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件)

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 …
    • good
    • 0
この回答へのお礼

有難うございます!!
とても有益な情報有難うございます。
アドバイス頂きました内容を全て今は理解できておりませんが、とても的確なアドバイスを頂けていると感じております。有難うございます。

>>余談ではありますが、
>>php9 では警告ではなくエラーと判断されてしまう様です

有賀王御座います。
本当、ご指摘頂いた通りと認識しております。
なので、エラー回避などではなく、きちんと丁寧な記述ができるよう今回質問をさせて頂いた次第です。
ご連絡頂きました内容、1つ1つ確認して確実に理解したいと思います。
このような素人の質問に的確なアドバイスを頂きまして大変感謝申し上げます、有難う御座います。mm

お礼日時:2023/09/25 21:07

下記に仕様変更で使えなくなった内容が書いているので、警告が表示された行と照らし合わせて修正して下さい。


https://www.php.net/manual/ja/migration80.incomp …

めんどくさいなら、PHP7に戻しましょう。
    • good
    • 0
この回答へのお礼

有難うございます。
まだPHPの8は使うには早いのかもしれませんね…。
ただ、書き方が緩いという認識はありましたので、これを機会にもう少し厳格な書き方を勉強したいと思いました。

お礼日時:2023/09/25 18:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A