我有一个会话处理类,它使用__GET and __SET
的对象重载,我一直遇到数组问题,并且通过引用读取来分配get,例如&__GET
问题是我无法更新值。例如,假设我有这个:
$session->item['one']['name']
我想通过为它赋予一个新值来改变它; $session->item['one']['name'] = 'new value'
但是,它不会改变。
任何想法如何解决这个问题?下面是代码,谢谢!
class Session
{
private $_session = array();
public function __construct()
{
if(!isset($_SESSION)) {
session_start();
}
$this->_session = $_SESSION;
}
public function __isset($name)
{
return isset($this->_session[$name]);
}
public function __unset($name)
{
unset($_SESSION[$name]);
unset($this->_session[$name]);
}
public function &__get($name)
{
return $this->_session[$name];
}
public function __set($name, $val)
{
$_SESSION[$name] = $val;
$this->_session[$name] = $val;
}
public function getSession()
{
return (isset($this->_session)) ? $this->_session : false;
}
public function getSessionId()
{
return (isset($_SESSION)) ? session_id() : false;
}
public function destroy()
{
$_SESSION = array();
session_destroy();
session_write_close();
unset($this->_session);
}
}
答案 0 :(得分:3)
在您的构造函数中,将$this->_session = $_SESSION;
更改为$this->_session = &$_SESSION;
,以便您在班级内获得对它的引用。