2014-07-23 57 views
1

我已经搜索和搜索,发现了大量的例子,但似乎每个人对于如何以及何时使用会话都有不同的看法,有人用它说一些它是邪恶的...PHP在会话中存储类

这是我的用例。

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

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

我知道我必须序列化\反序列化类来做到这一点,但我在这里寻找一些有关天气的反馈,这是正确的方式来满足这种用例或者如果有更好的选择?

我对PHP很有新意,主要是.NET人员,而在.NET中,会话通常是最好的前进方向。

所有的输入赞赏。

感谢

+1

我不会存储这个类。我会将必要的值放入数组中,将其编码为JSON并将JSON存储在会话中。如果你存储了你所存储的类的所有方法,那似乎是太多的开销。您也可以查看本地存储。 –

+0

您可以给我们一个你想存储的数据的例子,所以我们可以更好地了解最好的方法吗? – Jono20201

+1

@Jay序列化一个类的实例,你只存储类属性。在那里没有看到太多的开销。 – DarkBee

回答

0

我认为,当你留“连载\反序列化类,”你真的是要序列/会话,而不是实际的类定义反序列化类的实例(对象)。使用术语类,实例和对象时要小心,因为它们不可互换并可能导致混淆。

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

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

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