我注意到PHP session_decode()函数有一个由'R'表示的PHP引用变量的对象类型。但是,我似乎无法找到如何让session_decode()输出这个对象类型。如果我将引用变量分配给$ _SESSION,然后调用session_decode(),则引用变量由session_decode()表示为与它引用的变量具有相同的对象类型而不是“R”。 session_decode对象类型为'R'的用例是什么?
答案 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
),
)
那应该触发引用类型(运气好的话)。