PHP在会话中存储类

时间:2014-07-23 16:52:15

标签: php session

我搜索过并搜索过大量的例子,但似乎每个人对如何以及何时使用会话都有不同的看法,有些人用它来说它是邪恶的......

这是我的用例。

我有一个Class,它有几个需要在我的应用程序的每个页面上使用的变量。这些变量值是通过对我正在使用的API进行SOAP调用来设置的。 SOAP调用相对较快,但我试图了解如何避免在每个页面上调用API。我更喜欢拨打一次电话,然后"存储"某处的价值观。

我认为我只会在一些说Init.php页面上创建我的类的实例,进行SOAP调用然后将整个类存储在会话中。然后在我的所有页面上都包含Init.php页面。在该页面中,我会检查会话中是否存在类,如果是,则将其从会话中拉出来。

我知道我必须序列化\反序列化这个类才能做到这一点但是我在这里寻找一些关于天气的反馈这是满足这个用例的正确方法还是有更好的选择?

我是PHP的新手,主要是.NET人员,在.NET中,会话通常是最好的前进方式。

赞赏所有输入。

感谢

1 个答案:

答案 0 :(得分:0)

我假设当你保持“序列化\反序列化类”时,你的意思是你想要在会话中序列化/反序列化一个类实例(一个对象),而不是实际的类定义。使用术语类,实例和对象时要小心,因为它们不可互换并且可能导致混淆。

可以轻松地将对象存储在PHP会话中。 PHP会在请求结束时自动序列化对象,并在下一个请求读取会话数据时对其进行反序列化。

session_start();
if (!isset($_SESSION['soap'])) {
    $_SESSION['soap'] = doSoapRequest(); // Returns an instance of your class.
}

当序列化对象时,只会保存类中定义的变量以及类的名称。当它被反序列化时,类定义必须是可用的(即自动加载器或显式包含在脚本中)。反序列化将创建一个类实例,其数据与先前序列化的对象相同。