PHP スクリプトを実行していますが、次のようなエラーが発生し続けます:
注意: 未定義の変数: C:wampwwwmypathindex.php の 10 行目にある my_variable_name
注意: 未定義のインデックス: my_index C:wampwwwmypathindex.php 行 11
警告: C:wampwwwmypathindex.php の 11 行目に未定義の配列キー「my_index」があります
10行目と11行目は次のようになります:
リーリーこれらのエラー メッセージは何を意味しますか?
なぜ突然現れるのでしょうか?私はこのスクリプトを数年間使用していますが、これまでに問題が発生したことはありません。
これらのエラーを修正するにはどうすればよいですか?
###これを試して### リーリー
または、迅速で簡単な解決策もあります:
リーリーこのエラー メッセージは、PHP プログラマが存在しない変数 (または配列要素) にアクセスするときにタイプミスや間違いを検出できるようにすることを目的としています。したがって、優れたプログラマは次のことを行う必要があります:
注/警告: 未定義の変数
PHP では変数の宣言は必要ありませんが、スクリプトの後半で使用される変数に値を割り当て忘れる可能性があるセキュリティ ホールやバグを避けるために、宣言することをお勧めします。変数が宣言されていない場合、PHP は E_WARNING レベルのエラーを発行します。
この警告は、プログラマーが変数名のスペルミスや同様のエラー (たとえば、条件が false と評価された場合に変数に値を割り当てる場合など) を検出するのに役立ちます。さらに、初期化されていない変数に関しては他にも問題が発生する可能性があります。 PHP マニュアルに記載されているように、
これは、変数がインクルードされたファイルから値を取得する可能性があり、初期化されていない変数にアクセスするときに予期される null 値の代わりにこの値が使用されることを意味します。これにより、予期しない結果が生じる可能性があります。これを回避するには、使用する前に PHP ファイル内のすべての変数を初期化することをお勧めします。
この問題に対処するにはいくつかの方法があります:
推奨されるアプローチは、使用する前に各変数を宣言することです。この方法では、実際に間違いを犯して存在しない変数を使用しようとした場合にのみ、このエラーが表示されます。そのため、このエラー メッセージが表示されます。
リーリー特殊なケースは、変数が定義されているが関数内で参照できない場合です。 PHP では、関数には独自の変数スコープがあります。関数で外部変数を使用する必要がある場合は、その値を関数のパラメーターとして渡す必要があります:
リーリーエラーを抑制するには、null 合体演算子を使用します。ただし、この方法では、間違った変数名を使用したことを PHP が通知できないことに注意してください。
リーリー古い PHP バージョン ( リーリー
これは本質的にエラー抑制ですが、特定のエラーに対してのみ機能することに注意してください。したがって、PHP が変数を初期化されていないものとしてマークすることによって、ユーザーを支援できなくなる可能性があります。
@ 演算子を使用してエラーを抑制します。歴史的な理由からここに保管されていますが、真剣に考えれば、これは決して起こるべきではありませんでした。
注: 最初の点のみを実装することを強くお勧めします。
注: 未定義のインデックス/未定義のオフセット/警告: 未定義の配列キー
このヒント/警告は、ユーザー (または PHP) が配列の未定義のインデックスにアクセスしようとすると発生します。
内部配列
内部配列、つまりコード内で定義された配列を扱うときも、まったく同じ態度を採用する必要があります。使用する前にすべてのキーを初期化します。こうすることで、エラーは本来の役割を果たすことができ、コード内のエラーをプログラマに通知することができます。したがって、処理方法は同じです:
提案: 配列要素を宣言します:
リーリー特殊なケースは、関数が配列またはその他の値 (null や false など) を返す場合です。配列要素にアクセスする前に、次のようなテストを実行する必要があります。
リーリー外部配列
外部配列 ($_POST/$_GET/$_SESSION または JSON 入力など) の場合は、プログラマがこれらの配列の内容を制御できないため、状況は異なります。したがって、特定のキーが存在するかどうかを確認したり、欠落しているキーにデフォルト値を割り当てたりすることは合理的です。
PHP スクリプトに HTML フォームが含まれている場合、当然のことながら、最初の読み込み時にはフォームのコンテンツは存在しません。したがって、そのようなスクリプトはフォームが送信されたかどうかをチェックする必要があります。
リーリーチェックボックスなどの一部の HTML フォーム要素は、選択されていない場合、サーバーに送信されません。この場合、null 合体演算子を使用してデフォルト値を割り当てるのが合理的です。
リーリーオプションのクエリ文字列要素または Cookie も同じ方法で処理する必要があります。
リーリーただし、割り当てはスクリプトの先頭で行う必要があります。すべての入力を検証し、それをローカル変数に割り当て、コード全体で使用します。こうすることで、アクセスするすべての変数が意図的に存在することになります。