PHP:存储的对象引用存储在$\u会话中时会发生什么情况
对象引用存储在会话容器($\u会话)中时会发生什么情况 在这个过程中,当值被序列化时,对象引用是转换成副本还是被破坏PHP:存储的对象引用存储在$\u会话中时会发生什么情况,php,Php,对象引用存储在会话容器($\u会话)中时会发生什么情况 在这个过程中,当值被序列化时,对象引用是转换成副本还是被破坏 session_start(); $testArrayA = []; $testArrayB = []; $testArrayA["abc"] = &$testArrayB; $testArrayB["def"] = "test2"; $_SESSION["myvalue"] = $testArrayA; 提前多谢编写会话时,它会被序列化。序列化根本不关心引用,
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
会覆盖序列化行为以破坏其数据库连接引用。您可以通过在数据库中实现存储会话来测试这一点。我更愿意通过序列化包含两次相同引用的数组来测试它。我打赌这两个引用最终都是不同的副本,但情况可能并非如此。您可以通过在数据库中实现存储会话来测试这一点。我更愿意通过序列化包含两次相同引用的数组来进行测试。我敢打赌,两个引用最终都是不同的副本,但情况可能并非如此。