-4

我有一个名为 user 的类。我创建了该类的一个实例以便能够处理它。这个类有一个叫做 login 的函数,它就是这样做的。它让用户登录。我这样称呼它:

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

稍后在另一个文件中,我希望能够再次对该对象执行某些操作。我的第一个想法是“嘿,让它全球化,过上幸福的生活”,但后来我突然想到,现在如果第二个用户出现并登录,他们将使用同一个对象 - 导致混乱。由于我在大学学习 Java,然后我考虑使用 HashMap 样式的数组来保存用户的会话 id 和他的对象。在 PHP 中,它看起来像这样:

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

使用 session_id 我可以随时跟踪用户的对象(至少只要他登录)。 现在我的问题是:这是最好的方法吗?我是否忽略了某些东西?

现在退一步:假设这是要走的路,我还有另一个问题:我正在创建对象,调用它的登录函数。现在,如果用户成功登录,我就在用户对象中的登录功能中。如何将该对象存储到我的数组中(例如 HashMap 样式)。

非常感谢, Stiller_leser

我找到了这两个问题,但他们没有回答我自己的问题: oop - PHP 如何跟踪创建的对象 PHP、OOP、创建对象(关闭)

4

2 回答 2

3

这个假设是错误的:

我的第一个想法是“嘿,让它全球化,过上幸福的生活”,但后来我突然想到,现在如果第二个用户出现并登录,他们将使用同一个对象 - 导致混乱。

不同的用户不会访问同一个对象。所以回答你的问题:不,这不是最好的方法 - 你不需要制作一个数组来跟踪不同用户的对象......

于 2013-04-02T16:11:41.347 回答
0

当两个用户在服务器上运行相同的脚本时,变量不会干扰。这是因为变量的内存仅在脚本执行期间分配。每次用户调用 PHP 脚本时,服务器都会分配新的内存,脚本执行后,内存会再次被释放。

这意味着,调用同一个脚本的两个用户会有不同的用户对象,但是如果一个用户调用了两次脚本,他也会有两个不同的用户对象,因为服务器分配了两个不同的内存“集”并独立处理它们每个脚本执行

如果您想实现用户对象在脚本调用之间保持不变并且每个用户都有自己的用户对象,那么您应该查看会话和可选的序列化。会话大致以这种方式工作:

当用户第一次访问服务器时,他会获得一个唯一的标识符,并且正在服务器上创建一个文件。该文件包含会话变量。在这些会话变量中,您可以存储任何您想要的内容(例如您的用户对象)。

下次用户调用脚本时,该文件中的变量会再次加载,您可以重复使用它们。

于 2013-04-02T16:42:30.653 回答