"Notice:未定義の変数"、"Notice:未定義の index"、および "Notice:未定義のoffset"をPHPで使用

私は、PHPスクリプトを実行していますが、次のようなエラーが発生します。

Notice:Undefined variable: my_variable_name in C:wamp\mypath\index.php on line 10

Notice:Notice: Undefined index: my_index C:wamp_www\mypath\index.php on line 11

10行目と11行目はこのようになっています。

echo "My variable value is: " . $my_variable_name;
echo "My index value is: " . $my_array["my_index"];

これらのエラーメッセージにはどのような意味があるのでしょうか?

なぜ突然表示されるのでしょうか?私はこのスクリプトを何年も使っていましたが、何の問題もありませんでした。

どうしたら直せますか?

宜しくお願いします。

これは一般的な参考質問で、問題を何度も説明する代わりに、人々が重複してリンクするためのものです。この問題に関する実際の回答のほとんどが非常に具体的なものであるため、これが必要だと感じています。

関連するメタ議論:

  • [What can be done about repetitive questions?][1]
  • [「参考質問」は意味がありますか][2]

[1]: https://meta.stackexchange.com/questions/62258/what-can-be-done-about-repetitive-questions [2]: https://meta.stackexchange.com/questions/63762/do-reference-questions-make-sense

これらをお試しください。

Q1: この通知は、現在のスコープで$varnameが定義されていないことを意味しています。 スクリプトの現在のスコープで定義されていないということです。 スクリプトの現在のスコープで定義されていないことを意味します。

Q2: 疑わしい変数を使用する前に isset(), empty() の条件を使うとうまくいきます。

// recommended solution for recent PHP versions
$user_name = $_SESSION['user_name'] ?? '';

// pre-7 PHP versions
$user_name = '';
if (!empty($_SESSION['user_name'])) {
     $user_name = $_SESSION['user_name'];
}

あるいは、手っ取り早い解決策として

// not the best solution, but works
// in your php setting use, it helps hiding site wide notices
error_reporting(E_ALL ^ E_NOTICE);

セッションについての注意事項

解説 (2)

一般的には「悪いプログラム」が原因で、今も昔も間違いを犯す可能性があります。

1.誤りであれば、まず変数に適切な代入を行う: $varname=0; 2.もし、本当に時々しか定義されていないのであれば、使う前に if (isset($varname)) とテストする。 3.綴りが間違っている場合は、それを修正する。 4.もしかしたら、PHP設定の警告を消してしまうかもしれません。

解説 (4)

これは、まだ何も割り当てられていない変数をテスト、評価、または印刷していることを意味します。 これは、タイプミスをしているか、その変数が最初に何かに初期化されているかどうかをチェックする必要があることを意味します。 あるパスでは設定されていても、別のパスでは設定されていない可能性があるので、ロジックパスを確認してください。

解説 (0)