PHP を使用したオブジェクト指向プログラミング:リフレッシュするとオブジェクトが強制終了される
-
21-09-2019 - |
質問
OOP 用に PHP を調べていて、あることに気づきました...オブジェクトは、ページが更新されるたびに再インスタンス化されます。問題は、誰かが Web サイトにアクセスしている間、オブジェクトがクラス変数に特定の情報を保持するようにしたいことです。
- 誰かがウェブサイトでサーフィンをしている間ずっとオブジェクトを生き続ける方法はありますか?
- 私の問題にはどのような選択肢がありますか?
例もあるととても助かります!
解決
PHP はステートフルではありません。すべてのページの読み込みは 1 回限りのイベントです。セッションを使用するか、データベースに情報を保存することによって、データを永続化できます。
他のヒント
- PHP はステートフルではありません。すべてのリクエストはサーバー上の新しいプロセスです
最善の策は、セッション データを使用し、オブジェクトをインスタンス化するときにセッション データをオブジェクトに渡すことです。コンストラクターに必要なデータをセッションから取得してもらうと、基本的に必要な状態が完全に確保されます。
を使用してセッションにアクセスできます
$_SESSION['stuff'] = $data;
次に、$ x = new DataStore($ _ Session ['Stuff'])などのオブジェクトを使用できます。
セッション内にデータがある場合、オブジェクトはそのデータから自動的に設定されます。それ以外の場合は、デフォルトで標準の init が使用されます。
オブジェクトをシリアル化してから逆シリアル化するようなアプローチが役立つ場合でも、最初に理解していることを確認する必要があります。 なぜ あなたのオブジェクトは「消えます」。
HTTP は、Web サーバーからページやその他のリソースを取得するために使用されるプロトコルです。 ステートレス. 。これは基本的に、たとえ同じユーザーからのものであっても、あるリクエストは別のリクエストのことを何も知らないことを意味します。このように考えてください。PHP ページをリクエストすると、スクリプトが実行され、終了後に Apache が結果を送信します。ページを再度リクエストすると、最初にリクエストしたときと同じ動作が行われます。無国籍ですよ。
リクエスト間で状態を維持する (オブジェクトを忘れないようにする) テクニックがあり、それには Cookie や URL 書き換えなどが含まれます。ただし、Web アプリケーションを開発するときは、HTTP (したがって PHP スクリプト) のステートレスな性質を念頭に置く必要があります。
SESSIONS は優れており、PHP プログラミングの一部でオブジェクトの状態を保持するために使用しています。
または、より良い解決策は使用することです フレックス したがって、ステートレス HTTP プロトコルについて心配する必要はありません...