在用PHP编写的应用程序(例如社交网络)中,假设有10位用户(已登录)正在浏览该网站。
在PHP代码中,创建了“用户”对象来存储用户数据并将值传递给其他函数和类。
问题:当这10个用户转到user.php,其中有代码创建“user”对象时,这些对象如何在PHP中存储在内存中?他们不冲突吗?每个“用户”对象是唯一存储在内存中还是会被另一个覆盖?
例如,用户首先访问,因此对象“user”包含他/她的数据,但是当用户第二次访问时,内存中的“用户”对象被覆盖,因此当第一个用户调用该对象时,它是检索到的第二个用户数据。
或者,它是独一无二的吗?
我希望将PHP中的对象理解为新手,请解释一下,因为我找到的关于OOP的网页都没有解释这一点。
答案 0 :(得分:7)
PHP是一个CGI应用程序,这意味着,它是在每个请求上启动和终止的。
如果您同时有10个客户端请求,则将启动10个php副本,并将使用10个独立的内存块。所以,不,来自不同请求的对象不会干扰。
(注意:这个解释是故意简化的,实际上有不同的php设置和持久性选项)。
答案 1 :(得分:2)
学习这个的最好方法是在本地PC或Mac上安装php,然后创建一个php信息文件
<?php
phpinfo();
?>
...然后在浏览器中打开它......这将显示服务器上用于php和其他内容的所有设置。
关于你的问题的答案,这是一个关于newbee的高级主题,但php会话是保持用户信息的工作。它们通常会在一段时间内处理用户独有的会话ID,并且它们会动态分配内存或磁盘空间/平面文件或数据库(再次参见上面的设置)来存储相关数据。
不幸的是,对于你来说,这些都不是“自动的”,你必须创建脚本以使其发生并以你想要的方式运行。在这个网站上提出问题是一个良好的开端......
答案 2 :(得分:1)
你需要查看与php相关的对象设计模式,这本身就是一个很大的主题。有一本名为“PHP对象,模式和实践”的优秀Apress书籍,它解释了一些更常见的模式以及如何使用它们,并且是开始学习的好地方。
答案 3 :(得分:1)
用户信息全部存储在数据库中,每次页面加载时,用户对象都必须检索此数据。
对象知道用户正在查看页面的内容是因为他们的session_id在坚果shell中是给你的随机ID,存储在cookie中。
使用session_id,您可以从数据库中检索正确的信息。