2011-07-01 58 views
2

我想做一個對象,其中不需要創建所有的時間.... 例如,我有一個用戶對象,並且從db創建用戶,所以,當用戶登錄時,我可以從數據庫讀用戶對象信息...每個用戶發出請求,我需要再次創建一個新的用戶對象....即使我做一個單身對象......它仍然可以「保留」對象....但我想保存的PHP和數據庫之間的溝通...有沒有辦法保持一個對象,而不是查詢數據庫所有的時間?謝謝。如何在php中實現這個功能?

回答

5

把它放在$ _SESSION中?這將是有意義的,如果我讀了你的問題的權利

+1

這是正確的;只需將創建的用戶對象放入會話變量中,並檢查它是否已設置。請記住,您不能直接將對象放入會話中。它必須先序列化,並在收集後反序列化以便再次使用它。這也意味着你的User類必須是可序列化的。 –

+1

不!會話中的對象是一個不好的習慣。 – pltvs

+0

這是一個不好的做法? – Tattat

-1

您可以通過兩種方式實現:

1)由於Tattat說,你可以查詢數據庫,並得到了用戶的信息,並保存爲一個對象入會議$_SESSION['userObj'] = $userObj。然後,您可以從任何需要它的地方將它拉下來,例如$user = $_SESSION['userObj'];

2)第二種方法是從您包含在所有頁面上的常見php頁面(現在稱爲common.php)繼承。使用PHP GLOBAL varible使其可用於包含commmon php文件的任何頁面。例如

global $user; 

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

的varible $user會那麼在你其他的PHP頁面accessable只要你包括common.php文件我前面提到的。

希望這有助於花花公子:)

+0

OP詢問如何不在每個請求上查詢數據庫,而不是如何全局訪問變量。無論如何,使用全球從來都不是好習慣。 – Gordon

+0

但是如果OP使得他的用戶對象是全局的,那麼他不需要每次調用db,只要他想要他就可以擁有他的對象... – Silkutz

+4

廢話。每個對象只是爲了請求而生活。使它成爲全局並不奇蹟般地使對象在請求之間保持不變(這是OP要求的) – Gordon

2

但我想保存PHP和數據庫

使用APC或Memcached的之間的溝通和緩存查詢。每當用戶對象以需要將其寫回數據庫的方式進行更改時,都會使緩存失效。

這仍然會在每個請求上創建一個新的User對象,但它可以節省往返數據庫(而不是緩存)的往返時間。沒有辦法將PHP對象保存在請求之間的內存中,而無需序列化/保存到其他層。 PHP沒有共享。 PHP對象代表請求。

0

至於將用戶數據存儲在一個對象中並將其存儲在一個會話中,我認爲會很好,儘管我會在會話本身內拖動太多數據。您需要在不斷重新查詢數據源或使用會話之間找到平衡點。這真的取決於您的應用程序和環境。