1

はじめに、私は Java のバックグラウンドを持っています。

PHPの静的クラスメンバーのスコープは何ですか? 例: リクエスト、セッション、サーバーのライフサイクルなど

私の現在の理解では、セッションでスタックしていない限り、すべてがリクエストであるということです。言語ガイドには、これに反論したり確認したりするものは何も見つかりませんでした.

class MyKlass {
    public static $K_PAGE_SIZE = 50;
    public static $K_WITH_SPRINKLES = true;
}

if (isset($_GET['NO_SPRINKLES'])) {
    MyKlass::$K_WITH_SPRINKLES = false;
}

var_dump(MyKlass::$K_WITH_SPRINKLES);

ケース1

クエリ行に何もないこのコードを含むページにアクセスすると、次のように表示されます

bool(true)

ケース 2

このコードと?NO_SPRINKLES=trueクエリ行を含むページにアクセスすると、

bool(false)

ケース 3

?NO_SPRINKLES=trueクエリ行にあるページにアクセスし、それがないページにアクセスすると、常に bool(true) 正しく表示されますか?

ケース 4

のページにアクセスした後、そのページにアクセスした他?NO_SPRINKLES=trueのユーザーには、正しい? bool(true)

4

2 に答える 2

5

セッションを使用しない限り、PHP は情報を保持しません。したがって、変数は、ページをロードするときにコードの先頭で作成され、コードが送信されるときにコードの最後で破棄されます。

クラスとそのメンバーと同じです。それらは好きなだけ編集できます。情報は保持されますが、スクリプトの最後で失われます。

于 2012-06-22T21:32:45.533 に答える
2

これは PHP ではなく、HTTP 要求と応答のサイクルに関するものです。HTTP は、ステートレス プロトコルとして明確に定義されています。つまり、それぞれの新しいリクエストは、それ以前には何もなかったので処理されます (その後も何もありませんが、悲観的すぎるように聞こえます)。

はい、この「ステートレス性」を軽減するメカニズムがいくつかあります。Cookie はクライアント側に保存されます。サーバー側に保存されている情報へのキーとしてクッキーまたはいくつかのパラメーターを使用するセッション。しかし、一般的にあなたの理解はかなり正しいです: PHP だけで使用される各エンティティのタイムスパン (DB/ファイル、またはセッションに保存されていない) は単なるRequestです。

于 2012-06-22T21:33:00.643 に答える