編集:(更新)
多分私の質問は十分に明確ではありませんでした。わかりました、このように言いましょう:
$arr["a"] = 10;
var_dump($arr);
$arr["b"] =& $arr["a"];
var_dump($arr);
最初の var_dump は次を返します。
array
'a' => int 10
2番目のものは次のように返されます:
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 の両方が他のオブジェクトのコンテンツへの参照です...そのオブジェクトがどれか知っている人はいますか?
理論的には、両方の変数の設定を解除すると、どういうわけかそのコンテンツにアクセスできるはずです...手がかりはありますか?
ありがとうございました!