假设在我的应用程序中,我在第 1 页创建了一个对象实例。然后用户转到应用程序的其他部分,我希望该实例保留。如何“保存”实例?会议?
4 回答
是的,使用会话。
在页面开头调用session_start() ,然后将对象存储为类似$_SESSION['myobject']=$myobject;
后面的页面$_SESSION['myobject']
也调用 session_start() 后才能访问
您需要确保使用该会话的任何页面都具有定义的对象类或能够自动加载它。
您的类还可以定义魔术方法__sleep和__wakeup,它们允许您清理您不想序列化的任何成员变量(例如资源,例如数据库句柄)。在 __wakeup 期间,您可以恢复这些。
我的应用程序有两种方法:会话和数据库。
会话是的,但它将是具有相同属性而不是相同实例的新实例。其他选项是使用 O/R-Mapper 将对象存储在数据库中并将密钥保留在会话中,或者使用带有唯一密钥(例如会话 ID)的 memcached - 但这仍然不是同一个实例- 只是一个具有相同属性的实例。
如果您在 PHP 中的两个请求之间需要完全相同的对象实例,恐怕这是不可能的(并非不可能,一切都是可行的 - 但您必须在某种类型的应用程序服务器上运行 PHP)
您基本上有两个选择:服务器端状态或客户端状态。
服务器端状态通常通过会话完成。这是最简单和最强大的解决方案,但它有一些缺点(并发性、无法随时间保持状态等)。
客户端状态可以通过 URL 维护 - 通常在查询字符串参数中。例如,要“记住”$name
两个页面之间的变量,您可以在第一页上创建一个链接,如下所示:http://www.example.org/second_page.php?name=Jimbo
,然后第二页可以通过$_GET
. 这很难做到正确,并且它对您可以在页面之间传输多少状态有一些限制。出于这个原因,人们倾向于使用服务器端状态,即使客户端状态更合适。