我有一个名为user的类。我创建了该类的实例以便能够处理它。这个类有一个名为login的函数,它正是这样做的。它记录了用户。我这样称呼它:
$user = new user();
$user -> logIn();
稍后在另一个文件中,我希望能够再次对该对象执行某些操作。我的第一个想法是“嘿让它全球化并过上幸福的生活”,但后来我想到,现在如果第二个用户出现并登录,他们将使用相同的对象 - 导致混乱。 因为我正在大学学习Java,所以我考虑使用HashMap样式的数组来保存用户的会话ID和他的对象。在PHP中它看起来像这样:
$users = array[ session_id1 => user1object,
session_id2 => user2object
]
使用session_id,我可以随时跟踪用户的对象(至少在他登录时)。 现在我的问题:这是最好的方式 - 我忽略了什么吗?
现在退一步:假设这是要走的路,我还有另一个问题:我正在创建对象,调用它的登录功能。现在,如果用户成功登录,我就在user对象中的login-function中。如何将该对象存储到我的数组中(例如HashMap风格)。
非常感谢, stiller_leser
我发现了这两个问题,但他们没有回答我自己的问题: oop - How does PHP track created objects PHP, OOP, Creating an object (closed)
答案 0 :(得分:2)
这个假设是错误的:
我的第一个想法是“嘿让它全球化并过上幸福的生活”,但后来我想到,现在如果第二个用户出现并登录,他们将使用相同的对象 - 导致混乱。
不同的用户不会访问同一个对象。所以回答你的问题:不,这不是最好的方法 - 你不需要制作一个数组来跟踪不同用户的对象......
答案 1 :(得分:0)
当两个用户在服务器上运行相同的脚本时,变量不会干扰。这是因为变量的内存仅在脚本执行期间被分配。每次用户调用PHP脚本时,服务器都会分配新内存,并且在执行脚本后,内存将再次释放。
这意味着,调用相同脚本的两个用户将拥有不同的用户对象,但如果一个用户调用该脚本两次,他还将拥有两个不同的用户对象,因为服务器分配了两个不同的“内存组”和< strong>为每个脚本执行独立处理。
如果要实现脚本调用之间的用户对象保持不变,并且每个用户都有自己的用户对象,那么您应该查看sessions和serialization。会话大致以这种方式工作:
当用户第一次访问服务器时,他将获得一个唯一标识符,并且正在创建服务器上的文件。该文件包含会话变量。在这些会话变量中,您可以存储您想要的任何内容(例如您的用户对象)。
下次用户调用脚本时,该文件中的变量会再次加载,您可以重复使用它们。