【发布时间】:2014-12-02 00:36:45
【问题描述】:
我正在尝试编写一个包装 $_SESSION 的简单类。 这个想法是,我将能够从引用 $_SESSION 变量的类中设置和获取值,让 __set 和 __get 执行我需要的其他一些东西。
我目前拥有的,远未完成:
class Session
{
// Property declarations
public $data = array();
/**
* Class initialization
*/
public function __construct()
{
if (!session_id()) {
ini_set('session.cookie_lifetime', 0);
ini_set('session.gc-maxlifetime', 0);
session_start();
}
$this->data =& $_SESSION;
}
/**
* Get session ID
* @return string
*/
public function getId()
{
return session_id();
}
}
我正在尝试使其工作如下:
$session->images['directory'] = 1;
将与
相同$_SESSION['images']['directory'] = 1;
和
echo $session->images['directory'];
应该依次输出:1
关键是,我想使用多维数组,如下所示:
$session->images['foo']['bar'] = 'works';
对于 SO 和 php.net 的许多示例中提供的常规 __set 和 __get 函数,这不起作用。
当然,在页面重新加载/导航之后,我将能够使用它们各自的值访问相同的变量。
我尝试的是搜索 Google 和 Stackoverflow,我一直在“ArrayAcces”上登陆,但似乎无法弄清楚如何使用它来解决我的问题。
有人指出我正确的方向吗?
【问题讨论】:
-
php.net/manual/en/language.oop5.overloading.php#object.get :示例 1 中的代码正是您所需要的。您只需要添加您编写的构造函数即可。
-
@SergiuParaschiv 恐怕这行不通,我应该注意到我想要多维数组,所以使用该解决方案, $session->images['foo']['bar'] = '没有';不会工作。
-
@Milanzor ArrayAccess 以不同的方式工作。有对象,但可以访问数组。
-
你已经链接了一个我之前已经检查过的问题/答案,但它似乎仍然不是我的解决方案。
标签: php arrays class session multidimensional-array