Как получить справочную переменную PHP в результате session_decode - PullRequest
1 голос
/ 03 января 2011

Я заметил, что функция PHP session_decode () имеет тип объекта для ссылочных переменных PHP, обозначенный как 'R'. Тем не менее, я не могу выяснить, как получить session_decode () для вывода этого типа объекта. Если я назначаю ссылочную переменную для $ _SESSION, а затем вызываю session_decode (), ссылочная переменная представляется в session_decode () как имеющая тот же тип объекта, что и переменная, на которую она ссылается, а не 'R'. Каков вариант использования для типа объекта session_decode 'R'?

Ответы [ 2 ]

2 голосов
/ 04 января 2011

Чтобы session_encode кодировал переменную как ссылку, указанная переменная также должна быть в сеансе.Если он не находится в сеансе, он закодирует его как исходный тип.

$foo = 'bar';
$_SESSION['foo'] = $foo;
$_SESSION['bar'] = &$_SESSION['foo'];
$_SESSION['baz'] = &$foo;
$_SESSION['hey'] = &$foo;
var_dump(session_encode());

Выходы:

foo|s:3:"bar";bar|R:1;baz|s:3:"bar";hey|R:2;

Как видите, foo был сохранен как строка,bar был сохранен как ссылка на foo, но поскольку baz ссылается на локальную переменную $foo, которая может не существовать, когда сеанс декодируется в другом месте, PHP автоматически преобразует его в исходный тип строки.Однако hey также является ссылкой на $foo, но поскольку указанная переменная теперь хранится как baz, PHP закодирует hey как ссылку на baz.

0 голосов
/ 03 января 2011

Ах, я думаю, что вижу, что он делает.Попробуйте сделать что-то вроде этого:

$array = array(array(1));
$array[1] =& $array[0];

Итак, массив должен выглядеть следующим образом:

array(
    0 => array(
        0 => 1
    ),
    1 => &array(
        0 => 1
    ),
)

Это должно вызвать ссылочный тип (если повезет).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...