2

我的会话中有两个命名空间:“全局”和“用户”

在“全局”中只有一些设置,在“用户”中我有一个序列化的用户对象,我猜它是正确保存的:(这是来自会话文件)

全球|a:16:{ [...] s:12:"last_request";i:1301390173; [...] }

用户|a:1:{ s:10:"userObject";O:16:"currentUserModel":24:{ [...] s:10:"*_roleId";s:7:"premium"; [...] } }

当我这样做时: $sess = new Zend_Session_Namespace('global');

我收到一个关于包含我不想要的“currentUserModel.php”的错误,因为此时我不需要用户对象 - 我要做的就是获取我的“全局”命名空间。

现在的问题是:我是否必须包含存储在所有命名空间中的所有对象的所有类,或者是否可以只包含我正在访问的命名空间中的对象的类?

提前致谢

4

1 回答 1

2

Zend_Session 中的命名空间只是 $_SESSION 全局变量之上的一层。在 php 中,这些名称空间不存在。在 Zend_Session 中,名称空间是关联数组中的一个键。

因此,当您加载会话名称空间时,实际上加载了整个 $_SESSION,除了您不能通过此 Zend_Session 访问其他“名称空间”。所以是的:您需要在会话之前包含文件 currentUserModel.php。

另一种方法是正确使用类中的 __sleep() 和 __wakeup() 魔术方法,仅将类的属性序列化为关联数组,然后您就可以开始使用了。

于 2011-03-29T19:51:15.523 回答