当对象引用存储在会话容器($ _SESSION)中时会发生什么?
在这个过程中,当值被序列化时,对象引用是转换成副本还是它们只是被破坏了?
session_start();
$testArrayA = [];
$testArrayB = [];
$testArrayA["abc"] = &$testArrayB;
$testArrayB["def"] = "test2";
$_SESSION["myvalue"] = $testArrayA;
非常感谢
答案 0 :(得分:1)
编写会话时,它会被序列化。序列化完全不关心引用,因为它只读取数据(如果它从引用中读取它将解析引用的目标)。
您可以通过将最后一行更改为:
来查看此行为var_dump(serialize($testArrayA));
string(44) "a:1:{s:3:"abc";a:1:{s:3:"def";s:5:"test2";}}"
这就是存储在会话中的内容。
请注意,如果对象实现__sleep
或Serializable
接口,则其序列化行为是唯一的。我相信PDO
会覆盖序列化行为以销毁其数据库连接引用。