PHP перегрузка возврат по ссылке, обновление значения в массиве - PullRequest
3 голосов
/ 22 декабря 2011

У меня есть класс для обработки сеанса, который использует перегрузку объекта для __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 Ответ

3 голосов
/ 22 декабря 2011

В вашем конструкторе измените $this->_session = $_SESSION; на $this->_session = &$_SESSION;, чтобы получить ссылку на него внутри вашего класса.

...