Объекты внутри $ _SESSION, недокументированное поведение - PullRequest
0 голосов
/ 06 июня 2011

Пожалуйста, посмотрите на следующий код:

$_SESSION["process_y"] = new Process();
$process_y = $_SESSION["process_y"];
$process_y->name = "John";
$process_y = $_SESSION["process_y"];
echo " name is ".$process_y->name;
// Outputs "name is John"

Я получаю объект из переменной SESSION.Затем я изменяю элемент этого объекта, но никогда не сохраняю его обратно в сеанс.По какой-то причине я не в курсе, что измененный объект сохраняется в сеансе, как если бы выбранный объект был «указателем».

Я не смог найти ссылки, объясняющей это поведение в документации php.

ПРИМЕЧАНИЕ: register_globals ВЫКЛ.

Ответы [ 2 ]

2 голосов
/ 06 июня 2011

Такое поведение не документировано и не имеет ничего общего с глобальным массивом _SESSION.В некотором смысле вы правы: это указатель.Проверьте руководство для полного объяснения: http://www.php.net/manual/en/language.oop5.references.php

2 голосов
/ 06 июня 2011

Поскольку переменная $ _SESSION является глобальной, любые изменения в ней будут сохранены.Кроме того, $ _SESSION охватывает отдельные запросы (как и должно быть в сеансе), поэтому поведение соответствует ожидаемому.

...