ホームページ  >  に質問  >  本文

PHPの「注意: 未定義の変数」、「注意: 未定義のインデックス」、「警告: 未定義の配列キー」、「注意: 未定義のオフセット」を使用する

<p>PHP スクリプトを実行していますが、次のようなエラーが引き続き発生します: </p> <ブロック引用> <p>注意: 未定義の変数: C:wampwwwmypathindex.php の 10 行目の my_variable_name</p> <p>注: 未定義のインデックス: my_index C:wampwwwmypathindex.php 行 11</p> <p>警告: 配列キー 'my_index' は C:wampwwwmypathindex.php の 11 行目で定義されていません</p> </blockquote> <p>10 行目と 11 行目は次のようになります。 </p> <pre class="brush:php;toolbar:false;">echo "私の変数値は次のとおりです: " . $my_variable_name; echo "私のインデックス値は次のとおりです: " . $my_array["my_index"];</pre> <p>これらのエラー メッセージは何を意味しますか? </p> <p>なぜ突然現れるのですか?私はこのスクリプトを何年も使用していますが、一度も問題が発生したことはありません。 </p> <p>それらを修正するにはどうすればよいですか? </p>
<ブロック引用> <p><sub><strong>これは一般的な参考質問ですので、質問を何度も説明しなくても、重複する質問にリンクできます。この質問に対する現実世界の答えのほとんどは非常に具体的であるため、これが必要であると感じています。 </sub></p> <p><sub>関連するメタディスカッション:</sub></p>
P粉851401475P粉851401475423日前481

全員に返信(2)返信します

  • P粉644981029

    P粉6449810292023-08-24 11:13:56

    これらを試してください

    リーリー

    または、簡単で汚い解決策として:

    リーリー

    セッションに関する注意事項:

    返事
    0
  • P粉787934476

    P粉7879344762023-08-24 10:41:30

    このエラー メッセージは、PHP プログラマーが存在しない変数 (または配列要素) にアクセスするときにタイプミスやエラーを検出できるようにすることを目的としています。つまり、優れたプログラマー:

      各変数または配列キーを使用する場合は、必ず定義してください。関数内で変数を使用する必要がある場合は、それをパラメーターとして関数に渡す必要があります。
    1. このエラーに注意して、他のエラーと同様に修正してください。 これは、タイプミスがあるか、あるプロシージャが本来あるべきデータを返していないことを示している可能性があります。
    2. プログラマーの制御が及ばないまれなケースにのみ、このエラーを回避するコードを追加する必要があります。しかし、これは決して盲目的な習慣であってはなりません。
    通知/警告: 未定義の変数

    PHP では変数宣言は必要ありませんが、スクリプトの後半で使用される変数に値を代入するのを忘れるセキュリティ ホールやバグを避けるために、変数宣言を行うことが推奨されています。変数が宣言されていない場合、PHP は

    E_WARNING レベルのエラーを生成します。

    この警告は、プログラマが変数名のスペルミスや同様の種類のエラー (false と評価される条件内の変数に値を割り当てる場合など) を見つけるのに役立ちます。さらに、初期化されていない変数に関しては他の問題が発生する可能性があります。 PHP マニュアルの

    に記載されているように、 これは、変数がインクルードされたファイルから値を取得する可能性があり、その値が初期化されていない変数へのアクセスに予期される

    null

    の代わりに使用されることを意味し、これにより予測できない結果が生じる可能性があります。これを回避するには、使用前に PHP ファイル内のすべての変数を初期化することをお勧めします。 問題への対処方法:

    1. 推奨事項:

      各変数を使用する前に宣言してください。そうすれば、実際に存在しない変数を使用しようとするという間違いを犯した場合にのみ、このエラーが表示されます。まさにそれが、このエラー メッセージが存在する理由です。 リーリー

      変数が定義されているが関数内で参照できない場合の特殊なケース。 PHP の関数には独自の
    • 変数スコープ

      があります。関数で外部変数を使用する必要がある場合は、その値を関数のパラメーターとして渡す必要があります。 リーリー

    エラーを抑制するには、空の合体演算子を使用します。ただし、この方法では、間違った変数名を使用したことを PHP が通知できないことに注意してください。
      リーリー
    1. 古い PHP バージョン (< 7.0) の場合は、三項関数で isset() を使用できます

      リーリー

      これは特定のエラーのみを対象としていますが、本質的にはエラー抑制であることに注意してください。したがって、PHP が均一変数をマークすることによって支援できなくなる可能性があります。 < 7.0),可以使用带有三元的 isset()

      エラーを抑制するには、

      @operator
    2. を使用します。歴史的な理由からここを離れることになりますが、真剣に考えれば、こんなことはあってはならないことです。
    3. 注:
    4. ポイント 1 のみを実装することを強くお勧めします。

    注: 未定義のインデックス/未定義のオフセット/警告: 未定義の配列キー この通知/警告は、ユーザー (または PHP) が配列の未定義のインデックスにアクセスしようとすると発生します。

    内部配列

    コードで定義された内部配列を扱うときも、態度はまったく同じである必要があります。使用する前にすべてのキーを初期化するだけです。このようにして、バグは本来の仕事を行い、コード内のエラーをプログラマに通知します。したがって、方法は同じです:

    推奨:

    配列要素を宣言します:

    リーリー

    特殊なケースは、一部の関数が配列または他の値 (nullfalse など) を返す場合です。次に、

    などの配列要素にアクセスする前にテストを実行する必要があります。 リーリー

    外部配列

    外部配列 ($_POST / $_GET / $_SESSION または JSON 入力など) の場合は、プログラマが次のことを行うため、状況は少し異なります。このクラスは制御できません 配列の内容。したがって、特定のキーが存在するかどうかを確認したり、欠落しているキーにデフォルト値を割り当てたりすることは合理的です。

    • PHP スクリプトに HTML フォームが含まれている場合、最初に読み込まれるときにはフォームのコンテンツが存在しないのは当然です。したがって、このようなスクリプトはフォームが送信されたかどうかをチェックする必要があります

      リーリー
    • 一部の HTML フォーム要素 (チェックボックスなど) は、チェックされていない場合、サーバーに送信されません。この場合、null 合体演算子を使用してデフォルト値を割り当てることが正当化されます。 リーリー

    • オプションのクエリ文字列要素または Cookie は同じ方法で処理する必要があります

      リーリー

    ただし、割り当てはスクリプトの先頭で行う必要があります。

    すべての入力を検証します 、それらをローカル変数に割り当て、コード全体で使用します。したがって、アクセスするすべての変数は意図的に存在します。 ###関連している:###

    注: 未定義の変数
    • 注: 未定義のインデックス< /里>
    • 返事
      0
  • キャンセル返事