如何在session_decode结果中获取PHP引用变量

时间:2011-01-03 20:19:42

标签: php session

我注意到PHP session_decode()函数有一个由'R'表示的PHP引用变量的对象类型。但是,我似乎无法找到如何让session_decode()输出这个对象类型。如果我将引用变量分配给$ _SESSION,然后调用session_decode(),则引用变量由session_decode()表示为与它引用的变量具有相同的对象类型而不是“R”。 session_decode对象类型为'R'的用例是什么?

2 个答案:

答案 0 :(得分:2)

对于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的引用

答案 1 :(得分:0)

啊,我想我看到它在做什么。尝试做这样的事情:

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

现在,数组应该如下所示:

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

那应该触发引用类型(运气好的话)。