编辑:(更新)
也许我的问题不够清楚。好的,让我们这样说:
$arr["a"] = 10;
var_dump($arr);
$arr["b"] =& $arr["a"];
var_dump($arr);
第一个 var_dump 返回:
array
'a' => int 10
而第二个返回:
array
'a' => &int 10
'b' => &int 10
如果我unset($arr["a"])它将返回:
array
'b' => int 10
规则是,当 2 个或更多变量“指向”相同内容时,var_dump 将显示带有 & 字符 (&) 的引用。
在 $_SESSION 的情况下,即使 register_long_arrays = Off $_SESSION 仍然显示引用。所以很明显其他变量也指向相同的内容。
换句话说,如果我 unset($_SESSION) 还有其他变量可以链接到某个地方。在上面的示例中,当我unset($arr["a"])创建链接时,我仍然可以恢复该内容,例如:$arr["z"] =& $arr["b"]。
所以,我最初的问题是,有谁知道另一个变量是哪个?这样的变量很可能不存在......但我想知道为什么 PHP 内部会显示该引用。
谢谢
(原问题:)
当您在 PHP 中创建会话时,例如:
session_start();
$_SESSION["name"] = "my name";
并转储 GLOBAL 变量:
var_dump($GLOBALS);
你会看到类似的东西:
'HTTP_SESSION_VARS' => &
array
'name' => string 'my name' (length=7)
'_SESSION' => &
array
'name' => string 'my name' (length=7)
'HTTP_SERVER_VARS' =>
array
...
如您所见,变量 $GLOBAL[HTTP_SESSION_VARS] 和 $_SESSION 都是对其他对象内容的引用……有人知道那个对象是哪个吗?
理论上,如果我取消设置这两个变量,以某种方式它必须可以访问该内容......任何线索?
谢谢!