【发布时间】:2014-02-19 14:09:12
【问题描述】:
在一些我不允许更改的第三方代码中,发生了一些奇怪的事情。
他们将一个变量(一个包含对象的数组)写入会话(不对其进行序列化),然后在原始变量上使用 foreach 进行迭代(不使用引用)。每当他们更改一个值时,会话中的相应值也会更改。我能够创建一个具有相同行为的较小示例:
$test = array((object)array("categories" => "test"));
$_SESSION['woot'] = $test;
print_r($_SESSION['woot']);
foreach ($test as $a) {
if (!is_array($a->categories)) $a->categories = array();}
print_r($_SESSION['woot']);
这是结果:
Array
(
[0] => stdClass Object
(
[categories] => test
)
)
Array
(
[0] => stdClass Object
(
[categories] => Array
(
)
)
)
我已经注意到,当我对对象数组进行序列化和反序列化时,问题不会发生。
有人知道这里发生了什么吗?是代码吗?是不是服务器设置不正确?在联系代码的开发人员之前,我想了解更多信息。
附加信息:
- 我使用的是 PHP 版本 5.3.14
- 注册全局变量已关闭
问候, 约斯特。
【问题讨论】: