也許我只是沒有看到它,但有沒有其他方式可以訪問先前創建的會話名稱空間,而不是直接調用$_SESSION
?除了這個事實,我真的不想這樣做,Zend的文檔還advises against this:跨多個請求使用Zend會話命名空間
而$ _SESSION仍處於 PHP的全局命名空間,開發商 應該直接訪問 它避免,這樣Zend_Session和Zend_Session_Namespace可以最有效地安全地提供其 套件的會話相關的 功能。
給Zend_Session_Namespace類沒有爲獲得一個命名空間的靜態方法,雖然Zend_Session中現已棄用namespaceGet
方法指示我使用Zend_Session_Namespace#getIterator
,這種方法也不是一成不變的。
這意味着我需要使用關鍵字new
來初始化一個新的名稱空間。問題是,這並不包括先前設定的變量:
$ns = new Zend_Session_Namespace('foo');
$ns->foo = 'bar';
在隨後的請求,這一點:
print_R(new Zend_Session_Namespace('Foo'));
...打印此:
Zend_Session_Namespace Object
(
[_namespace:protected] => Foo
)
這似乎是顯而易見的。
那麼我該如何獲取以前創建的命名空間,而不使用$_SESSION['Foo']
?
Tim已經回答了這個問題:使用'new'運算符。既然你似乎在尋找一個'static'方法:afaik沒有,但是當然你可以自由地編寫你自己的靜態工廠單例,如果你想避免有幾十個新的Zend_Session_Namespace()聲明傳播在你的代碼上。 –