PHP:存储的对象引用存储在$\u会话中时会发生什么情况

PHP:存储的对象引用存储在$\u会话中时会发生什么情况,php,Php,对象引用存储在会话容器($\u会话)中时会发生什么情况 在这个过程中,当值被序列化时,对象引用是转换成副本还是被破坏 session_start(); $testArrayA = []; $testArrayB = []; $testArrayA["abc"] = &$testArrayB; $testArrayB["def"] = "test2"; $_SESSION["myvalue"] = $testArrayA; 提前多谢编写会话时,它会被序列化。序列化根本不关心引用,

对象引用存储在会话容器($\u会话)中时会发生什么情况

在这个过程中,当值被序列化时,对象引用是转换成副本还是被破坏

session_start();
$testArrayA = [];
$testArrayB = [];    
$testArrayA["abc"] = &$testArrayB;
$testArrayB["def"] = "test2";
$_SESSION["myvalue"] = $testArrayA;

提前多谢

编写会话时,它会被序列化。序列化根本不关心引用,因为它只读取数据(如果从引用中读取,它将解析引用的目标)

通过将最后一行更改为:

var_dump(serialize($testArrayA));

string(44) "a:1:{s:3:"abc";a:1:{s:3:"def";s:5:"test2";}}"
这就是会话中存储的内容


请注意,如果对象实现
\u sleep
可序列化接口,则其序列化行为是唯一的。我相信
PDO
会覆盖序列化行为以破坏其数据库连接引用。

当会话被写入时,它会被序列化。序列化根本不关心引用,因为它只读取数据(如果从引用中读取,它将解析引用的目标)

通过将最后一行更改为:

var_dump(serialize($testArrayA));

string(44) "a:1:{s:3:"abc";a:1:{s:3:"def";s:5:"test2";}}"
这就是会话中存储的内容


请注意,如果对象实现
\u sleep
可序列化接口,则其序列化行为是唯一的。我相信
PDO
会覆盖序列化行为以破坏其数据库连接引用。

您可以通过在数据库中实现存储会话来测试这一点。我更愿意通过序列化包含两次相同引用的数组来测试它。我打赌这两个引用最终都是不同的副本,但情况可能并非如此。您可以通过在数据库中实现存储会话来测试这一点。我更愿意通过序列化包含两次相同引用的数组来进行测试。我敢打赌,两个引用最终都是不同的副本,但情况可能并非如此。