検索

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

PHPコードブロック間の変数スコープ

私は PHP を (まだ) 始めたばかりで、学びながら勉強しています。

特定の変数を取得してそのプロパティにアクセスする必要があることがよくあります。

リーリー

$user_info = get_userdata($id); を一度取得して、必要に応じて使用することを好みます。 同じファイル内ですが、異なる <?php?> ブロック

リーリー

しかし、$user_info はグローバルではないため、ブロック間で共有できないのではないかと思います。 通常のアプローチは何ですか?

P粉403821740P粉403821740418日前736

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

  • P粉713846879

    P粉7138468792023-10-23 13:15:37

    ブロック (ループ、if ステートメント ) 内で使用できますが、関数 内では使用できません。関数内で動作させるには、global キーワードを使用する必要があります:

    リーリー

    PHP 変数スコープの詳細については、公式ドキュメントをご覧ください:)< /a>

    返事
    0
  • P粉262926195

    P粉2629261952023-10-23 09:09:44

    PHP コード ブロックに意味を与えすぎています。
    これは世界的なものではありません。
    これらのブロックは同じ PHP スクリプトに属します。これは HTML を出力するための賢い方法にすぎず、それ以上のものではありません。これを echo HTML に置き換えても、何の違いもありません。

    PHP スクリプト全体は、繰り返しではなく一度に実行されます。ご想像のとおり、PHP ブロックがサーバー側で実行され、次に HTML ブロックがクライアント側で実行され、その後、クライアント側の PHP ブロックに戻ると考えてください。サーバーサイドなどこれは間違っています。
    PHP スクリプト全体がサーバー側で実行され、ブラウザーでプレーン HTML が生成され、その後消えます。

    そのため、同じ PHP スクリプト内で HTML フォームとそのハンドラーの両方をプログラムすることはできません。後者を前者の後に置くだけです。ハンドラーが適切に動作するには、 サーバー を再度呼び出す必要があります。これはまったく別の呼び出しであり、同じスクリプトの別のインスタンスであり、前回の呼び出しについては何も知りません。この呼び出しはとうに廃止されています。 PHP についてもう 1 つ知っておくべきことがあります:

    PHP スクリプトの実行はアトミックです。これは、ブラウザ内で常に実行されているデスクトップ アプリケーションや、デスクトップ アプリケーションに常に接続されているデーモンとは異なります。これはコマンド ライン ユーティリティに似ており、仕事を行って終了します。独立して実行されます:

    1. ブラウザ呼び出し
    2. PHP が起動し、HTML ページを作成し、ブラウザに送信します。その後、終了します。
    3. ブラウザはこの HTML をレンダリングしてユーザーに表示します。
    4. ユーザーがリンクをクリックする
    5. ブラウザ呼び出し
    6. 別の PHP インスタンスは、前の呼び出しについては何も知らずに起動されます以降も同様です
    7. 返事
      0
  • キャンセル返事