PHP重载按引用返回,更新数组中的值

时间:2011-12-22 18:01:25

标签: php overloading

我有一个会话处理类,它使用__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);
    }

}

1 个答案:

答案 0 :(得分:3)

在您的构造函数中,将$this->_session = $_SESSION;更改为$this->_session = &$_SESSION;,以便您在班级内获得对它的引用。