2013-04-02 44 views
-4

我有一個名爲user的類。我創建了該類的一個實例來處理它。這個類有一個名爲login的函數,它完全是這樣的。它記錄在我這樣稱呼它的用戶。PHP如何處理對象

$user = new user(); 
$user -> logIn(); 

在不同的文件後來我想能夠再次做到與對象的東西。我的第一個想法是「嘿,讓它變得全球化,過上幸福的生活」,但是後來我發現,如果第二個用戶登陸並且登錄,他們會使用同一個對象 - 導致混亂。 因爲我在大學學習Java,於是我考慮使用HashMap樣式的數組來保存用戶的會話標識和對象。在PHP它應該是這樣的:

$users = array[ session_id1 => user1object, 
       session_id2 => user2object 
     ] 

隨着SESSION_ID我就可以隨時跟蹤用戶的對象(以及至少只要他登錄)。 現在我的問題:這是最好的方式 - 我忽略了什麼嗎?

現在回到第一步:假設是要走的路,我有另一個問題:我創建對象,調用它的登錄函數。現在,如果用戶登錄成功,我將進入用戶對象的登錄功能。如何將該對象存儲到我的數組中(例如HashMap樣式)。

非常感謝, stiller_leser

我發現了這兩個問題,但他們並沒有回答我的問題: oop - How does PHP track created objects PHP, OOP, Creating an object (closed)

+0

你什麼時候有兩個用戶同時登錄? –

+0

你的第一個問題很清楚地回答了:'會話'做了很多努力。你傳遞一個對象並且'Session'序列化它,這樣你就可以在請求之間移動。 PHP沒有任何東西叫做持久性(這就是爲什麼會話和cookie存在) – Korcholis

+0

我認爲,由於PHP在服務器端,我的網站上可能會有多個用戶 - 這意味着多個用戶將被登錄或者這兩個用戶的php對象是否已經彼此獨立? –

回答

2

這種假設是錯誤的:

我的第一個思想是「嘿,讓它變得全球化,過上幸福的生活」,但是後來我想到,現在如果第二個用戶出現並登錄,他們會使用同一個對象 - r惹惱了混亂。

不同的用戶不會訪問同一個對象。所以要回答你的問題:不,這不是最好的方法 - 你不需要創建一個數組來跟蹤不同用戶的對象...

0

當兩個用戶在服務器上運行相同的腳本時,變量不會干涉。這是因爲變量的內存只在腳本執行期間被分配。每次用戶調用一個PHP腳本時,服務器都會分配新的內存,腳本執行完畢後,內存將再次釋放。

這意味着,調用相同腳本的兩個用戶將具有不同的用戶對象,但是如果一個用戶調用腳本兩次,他也將有兩個不同的用戶對象,因爲服務器分配兩個不同的「集合」內存和爲每個腳本執行獨立處理它們

如果要實現用戶對象在腳本調用之間保持不變,並且每個用戶都有自己的用戶對象,則應該查看sessions和可選的serialization。會話粗略地以這種方式工作:

當用戶第一次訪問服務器時,他被賦予一個唯一的標識符,並且正在創建服務器上的文件。該文件保存會話變量。在這些會話變量中,可以存儲任何你想要的(例如你的用戶對象)。

用戶下一次調用腳本時,該文件中的變量會再次加載,您可以重新使用它們。