【发布时间】:2011-01-23 13:21:33
【问题描述】:
编辑:(已更新)
也许我的问题不够清楚。好吧,让我们这样说:
$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 都是 对其他对象内容的引用...有人知道那个对象是哪个吗?
理论上,如果我取消设置这两个变量,一定可以通过某种方式访问它 内容...有什么线索吗?
谢谢!
【问题讨论】:
-
我一直在查看 Zend 的 PHP 源代码,有趣的是在 main/php_variables.c 中所有超全局变量都已初始化,但 SESSION 在 ext/session/session.c 中有自己的文件。到目前为止,我不知道它是否可能。
标签: php reference httpsession superglobals var-dump