Может ли кто-нибудь объяснить мне, почему следующий код не устанавливает значения в массиве, как ожидалось? $ _SESSION ['foo'] остается пустым, даже после назначения time () и rand (). Я проверил, метод доступа __get фактически вызывается при назначении переменных, но они не сохраняются по той или иной причине.
$test = Session::getSession('test');
$test->foo = array();
$test->foo[] = time();
$test->foo['baz'] = rand(1,9);
var_dump($_SESSION);
Использование этой простой оболочки Session
class Session
{
protected $namespace = null;
public static function getSession($namespace)
{
return new Session($namespace);
}
public static function destroySession($namespace)
{
if(isset($_SESSION[$namespace])) {
unset($_SESSION[$namespace]);
return true;
}
return false;
}
private function __construct($namespace)
{
$this->namespace = $namespace;
if(!isset($_SESSION[$namespace])) {
$_SESSION[$namespace] = null;
}
}
public function &__get($name)
{
return (isset($_SESSION[$this->namespace][$name])) ? $_SESSION[$this->namespace][$name] : null;
}
public function __set($name, $value)
{
$_SESSION[$this->namespace][$name] = $value;
}
}
На случай, если это уместно, я использую php 5.3.6