質問
アプリでページ1にオブジェクトインスタンスを作成したとします。ユーザーはアプリの他の部分に移動し、インスタンスを残したいと考えています。インスタンスを「保存」するにはどうすればよいですか?セッション?
解決
はい、セッションを使用します。
ページの先頭で session_start()を呼び出してから、などのオブジェクトを保存します$ _SESSION ['myobject'] = $ myobject;
後続のページは、session_start()を呼び出した後も $ _ SESSION ['myobject']
にアクセスできます
そのセッションを使用するページには、オブジェクトのクラスが定義されているか、自動読み込み。
クラスは、マジックメソッド __ sleep および __ wakeup を使用すると、シリアル化したくないメンバー変数(dbハンドルなどのリソースなど)をクリーンアップできます。 __wakeup中にこれらを復元できます。
他のヒント
アプリケーションに使用した2つの方法があります:セッションとデータベース。
セッションはい。ただし、同じインスタンスではなく、同じプロパティを持つ新しいインスタンスになります。他のオプションは、O / R-Mapperを使用してオブジェクトをDBに保存し、セッションでそのキーを保持するか、memcachedを一意のキー(セッションIDなど)で使用しますが、これはまだ同じインスタンス-同じプロパティを持つ単なるインスタンス。
PHPの2つのリクエスト間でオブジェクトの完全に同じインスタンスが必要な場合、これは不可能だと思います(不可能ではなく、すべてが実行可能です-しかし、何らかのタイプのアプリケーションサーバー上でPHPを実行する必要があります)
基本的に、サーバー側の状態またはクライアント側の状態の2つのオプションがあります。
サーバー側の状態は通常、セッションを通じて行われます。これは最も単純で最も強力なソリューションですが、いくつかの欠点があります(並行性、状態を長期間維持できないなど)。
クライアント側の状態は、URLを介して維持できます-通常、クエリ文字列パラメーターで。たとえば、「記憶」する2ページ間の変数 $ name
の場合、最初のページに次のようなリンクを作成できます。 http://www.example.org/second_page.php?name=Jimbo
、2番目のページは $ _ GET
を介して変数を取得できます。これを正しく行うのははるかに難しく、ページ間で転送できる状態の量には制限があります。このため、クライアント側の状態がより適切な場合でも、人々はサーバー側の状態に移行する傾向があります。