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()要导入什么;