假设我的应用程序中有一个在第1页上创建的对象实例。然后用户转到应用程序的其他部分,我希望保留实例。我如何'保存'实例?会话?

有帮助吗?

解决方案

是的,请使用会话

在页面开头调用 session_start(),然后使用之类的内容存储对象$ _SESSION [ '为MyObject'] = $为MyObject;

后面的页面也可以在调用session_start()

之后访问 $ _ SESSION ['myobject']

您需要确保使用该会话的任何页面都具有已定义对象的类或能够自动加载

你的班级也可以定义魔法方法 __ sleep __ wakeup 允许您清理不想序列化的任何成员变量(如资源,如数据库句柄)。在__wakeup期间,您可以恢复这些。

其他提示

我使用的方法有两种:会话和数据库。

会话是,但它将是具有相同属性的新实例,而不是相同的实例。其他选项是使用O / R-Mapper将对象存储在数据库中并在会话中保留它的密钥,或者使用带有唯一密钥的memcached(比如会话ID) - 但这仍然不是相同的实例 - 只是具有相同属性的实例。

如果你需要PHP中两个请求之间的对象的完全相同的实例,我担心这是不可能的(不是不可能,一切都是可行的 - 但是你'我必须在某种类型的应用程序服务器上运行PHP)

您基本上有两个选择:服务器端状态客户端状态

服务器端状态通常通过会话完成。这是最简单和最强大的解决方案,但它有一些缺点(并发,无法随时间持续状态等)。

客户端状态可以通过URL维护 - 通常在查询字符串参数中。例如,要“记住”两个页面之间的变量 $ name ,您可以在第一页上创建一个链接,如下所示: http://www.example.org/second_page.php?name=Jimbo ,然后第二页可以通过 $ _ GET 获取变量。这要做得更难,而且在页面之间可以传输的状态有一些限制。因此,即使客户端状态更合适,人们也倾向于采用服务器端状态。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top