Php 跨多个请求使用Zend会话名称空间

Php 跨多个请求使用Zend会话名称空间,php,zend-framework,session,namespaces,Php,Zend Framework,Session,Namespaces,也许我只是没有看到它,但是除了直接调用$\u session之外,还有其他方法访问以前创建的会话名称空间吗?除了我确实不想这样做之外,Zend文档还: 而$\u会话在中仍然可用 PHP的全局名称空间,开发者 应避免直接访问 它,让Zend_会话和 Zend_Session_名称空间最能 有效和安全地提供 与会话相关的套件 功能 Zend_会话_名称空间类没有获取名称空间的静态方法,尽管Zend_会话中现在已弃用的方法指示我使用该方法,但该方法不是静态的 这意味着我需要使用new关键字初始化一个新

也许我只是没有看到它,但是除了直接调用
$\u session
之外,还有其他方法访问以前创建的会话名称空间吗?除了我确实不想这样做之外,Zend文档还:

而$\u会话在中仍然可用 PHP的全局名称空间,开发者 应避免直接访问 它,让Zend_会话和 Zend_Session_名称空间最能 有效和安全地提供 与会话相关的套件 功能

Zend_会话_名称空间类没有获取名称空间的静态方法,尽管Zend_会话中现在已弃用的方法指示我使用该方法,但该方法不是静态的

这意味着我需要使用
new
关键字初始化一个新名称空间。问题是,这不包括以前设置的变量:

$ns = new Zend_Session_Namespace('foo');
$ns->foo = 'bar';
在随后的请求中,这:

print_R(new Zend_Session_Namespace('Foo'));
…打印此文件:

Zend_Session_Namespace Object
(
    [_namespace:protected] => Foo
)    
这似乎很明显


那么,我应该如何在不使用
$\u SESSION['Foo']
的情况下获取先前创建的名称空间?

如果您的两个代码示例不匹配(Foo vs.Foo),我不确定这是否只是一个输入错误。Zend_Session_Namespace只是$_Session的包装器,所以您需要做的就是使用相同的键创建一个名称空间对象,然后所有数据都应该可用

$ns = new Zend_Session_Namespace('foo');
$ns->foo = 'bar';
然后在另一页上:

$ns = new Zend_Session_Namespace('foo');
echo $ns->foo; // should output bar

如果这不起作用,那么您的会话配置就有问题。

您的两个代码示例不匹配(foo与foo),我不确定这是否只是一个输入错误。Zend_Session_Namespace只是$_Session的包装器,所以您需要做的就是使用相同的键创建一个名称空间对象,然后所有数据都应该可用

$ns = new Zend_Session_Namespace('foo');
$ns->foo = 'bar';
然后在另一页上:

$ns = new Zend_Session_Namespace('foo');
echo $ns->foo; // should output bar

如果这不起作用,那么您的会话配置有问题。

Tim已经回答了这个问题:使用
new
操作符。由于您似乎在搜索
静态
方法:当然没有,但是如果您想避免在代码中散布大量的
新Zend\u Session\u Namespace()
声明,您当然可以自由编写自己的静态工厂单例。Tim已经回答了这个问题:使用
操作符。既然你似乎在搜索一个
静态的
方法:当然没有,但是如果你想避免在你的代码中散布几十个
新的Zend\u Session\u Namespace()
声明,你当然可以自由地编写自己的静态工厂单例。但是我错了,访问属性实际上是有效的,尽管
打印\r
没有显示它们。我想一定是做得太久了。。。很抱歉浪费你的时间!print\u r可能会产生误导,因为数据仍然存储在$\u SESSION中(因此在打印时不会显示),命名空间类只是从那里访问它。Zend\u SESSION\u namespace()要导入什么;案例错误确实是一个打字错误。但是我错了,访问属性实际上是有效的,尽管
打印\r
没有显示它们。我想一定是做得太久了。。。很抱歉浪费你的时间!print\u r可能会产生误导,因为数据仍然存储在$\u SESSION中(因此在打印时不会显示),命名空间类只是从那里访问它。Zend\u SESSION\u namespace()要导入什么;