2011-07-01 5 views
2

私はすべての時間を作成する必要はありませオブジェクトを、したいと思います.... ときに、ユーザのログイン、例えば、私はユーザーオブジェクトを持っており、ユーザーがDBから作成されるので、私がすることができますdbからユーザオブジェクト情報を読み込みます...各ユーザがリクエストを行い、再び新しいユーザオブジェクトを作成する必要があります....でも、私はシングルトンオブジェクトを作成します...それでもオブジェクトを "保持"することができます....しかし、私はphpとdbの間の通信を保存したい...データベースのすべての時間クエリの代わりにオブジェクトを保持する方法はありますか?ありがとうございました。これをPHPでどのように達成できますか?

答えて

5

$ _SESSIONでそれを入れて? Tattatあなたはデシベルを照会し、ユーザーの情報を取得し、にオブジェクトとしてそれを救うことができる言うよう

1):それは理にかなって私は右

+1

これは間違いありません。作成されたUserオブジェクトをセッション変数に入れ、それが設定されているかどうかを確認するだけです。オブジェクトをセッションに直接入れることはできません。それは最初にシリアル化され、再度使用するために収集後にシリアル化されなければなりません。これは、Userクラスがシリアライズ可能でなければならないことを意味します。 –

+1

NO!セッション中のオブジェクトは悪い習慣です。 – pltvs

+0

yそれは悪い習慣ですか? – Tattat

-1

あなたの質問を読んでいる場合、次の2つの方法でこれを達成できますセッション$_SESSION['userObj'] = $userObj$user = $_SESSION['userObj'];

2)2番目の方法は、すべてのページ(現在はcommon.phpと呼んでいます)に含める一般的なPHPページから継承することです。 PHP GLOBAL変数を使用して、commmon phpファイルを含む任意のページを使用できるようにします。例えば

global $user; 

$admin = db_fetch_object(db_query("SELECT * FROM user u WHERE u.user_id = '%d'", $_SESSION['admin_id'])); 

varible $userは、限り、あなたは私が前に述べたcommon.phpファイルを含めて、あなたの他のPHPページによってアクセスできるようすることでしょう。

・ホープ、このヘルプ男:)

+0

OPは、どのようにグローバルに変数にアクセスするかではなく、すべての要求に対してデータベースを照会しない方法を尋ねます。とにかくグローバルを使うことは決して良いことではありません。 – Gordon

+0

しかし、OPが彼のユーザーオブジェクトをグローバルにした場合、彼は毎回dbを呼び出す必要はなく、彼は単に彼が望むたびにオブジェクトを持つだろう... – Silkutz

+4

ナンセンス。各オブジェクトは要求のためだけに存在します。それをグローバルにすることは魔法のようにオブジェクトをリクエスト間で持続させることはありません(これはOPが求めているものです) – Gordon

2

しかし、私はPHPとDB

使用APCやMemcachedの間の通信を保存し、クエリをキャッシュしたいです。 Userオブジェクトがデータベースに書き戻す必要がある方法で変更されたときはいつでもキャッシュを無効にします。

これはまだ要求ごとに新しいユーザーオブジェクトを作成しますが、それは(ただし、キャッシュに)データベースにあなたの往復を節約できます。 PHPオブジェクトを他の層にシリアライズ/永続化することなく、Request間でメモリに保持する方法はありません。 PHPは何も共有されていません。リクエストにはPHPオブジェクトが存在します。オブジェクト内のユーザデータを格納し、私はセッション自体の中で周りにあまりにも多くのデータをドラッグしてしまうものの、セッション内で、私は大丈夫だと思うことを格納するよう

0

。ただし、データソースの再クエリやセッションの使用を常に見直すこととのバランスを取る必要があります。これは実際にアプリケーションと環境によって異なります。

関連する問題