PHP を使用したオブジェクト指向プログラミング:リフレッシュするとオブジェクトが強制終了される

StackOverflow https://stackoverflow.com/questions/2277173

  •  21-09-2019
  •  | 
  •  

質問

OOP 用に PHP を調べていて、あることに気づきました...オブジェクトは、ページが更新されるたびに再インスタンス化されます。問題は、誰かが Web サイトにアクセスしている間、オブジェクトがクラス変数に特定の情報を保持するようにしたいことです。

  1. 誰かがウェブサイトでサーフィンをしている間ずっとオブジェクトを生き続ける方法はありますか?
  2. 私の問題にはどのような選択肢がありますか?

例もあるととても助かります!

役に立ちましたか?

解決

PHP はステートフルではありません。すべてのページの読み込みは 1 回限りのイベントです。セッションを使用するか、データベースに情報を保存することによって、データを永続化できます。

他のヒント

使用できます セッション 1人のユーザーに関連付けられたデータを異なるページ間で保持するため (引用) :

PHPでのセッションサポートは、後続のアクセス全体で特定のデータを保存する方法で構成されています。

を参照してください。 セッション処理 セッションの詳細については、マニュアルのセクションを参照してください。

Apache がページを提供できるようになる前に php スクリプトを終了する必要があるため、本当にそれを実行したい場合は、次のことが実行できます。 シリアライズ 永続化して使用したいすべてのオブジェクトを保存します セッション ユーザーを追跡するための Cookie

  1. PHP はステートフルではありません。すべてのリクエストはサーバー上の新しいプロセスです

最善の策は、セッション データを使用し、オブジェクトをインスタンス化するときにセッション データをオブジェクトに渡すことです。コンストラクターに必要なデータをセッションから取得してもらうと、基本的に必要な状態が完全に確保されます。

を使用してセッションにアクセスできます

$_SESSION['stuff'] = $data;

次に、$ x = new DataStore($ _ Session ['Stuff'])などのオブジェクトを使用できます。

セッション内にデータがある場合、オブジェクトはそのデータから自動的に設定されます。それ以外の場合は、デフォルトで標準の init が使用されます。

オブジェクトをシリアル化してから逆シリアル化するようなアプローチが役立つ場合でも、最初に理解していることを確認する必要があります。 なぜ あなたのオブジェクトは「消えます」。

HTTP は、Web サーバーからページやその他のリソースを取得するために使用されるプロトコルです。 ステートレス. 。これは基本的に、たとえ同じユーザーからのものであっても、あるリクエストは別のリクエストのことを何も知らないことを意味します。このように考えてください。PHP ページをリクエストすると、スクリプトが実行され、終了後に Apache が結果を送信します。ページを再度リクエストすると、最初にリクエストしたときと同じ動作が行われます。無国籍ですよ。

リクエスト間で状態を維持する (オブジェクトを忘れないようにする) テクニックがあり、それには Cookie や URL 書き換えなどが含まれます。ただし、Web アプリケーションを開発するときは、HTTP (したがって PHP スクリプト) のステートレスな性質を念頭に置く必要があります。

SESSIONS は優れており、PHP プログラミングの一部でオブジェクトの状態を保持するために使用しています。

または、より良い解決策は使用することです フレックス したがって、ステートレス HTTP プロトコルについて心配する必要はありません...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top