我遇到了这个问题,并最终将其追踪到函数内部的Object
值更改会影响函数外部的对象。
function fnc1($data)
{
foreach($data as $i=>$obj)
if(!isset($x))$obj->dtObj = date('Y-m-d');
}
for($n=0;$n<5;$n++)
{
$tmp = new stdclass;
$tmp->dtObj = new DateTime(date("Y-m-d H:0$n:s"));
$data[] = $tmp;
}
fnc1($data);
print_r($data);
输出;
Array (
[0] => stdClass Object
(
[dtObj] => 2019-08-13
)
[1] => stdClass Object
(
[dtObj] => 2019-08-13
)
[2] => stdClass Object
(
[dtObj] => 2019-08-13
)
[3] => stdClass Object
(
[dtObj] => 2019-08-13
)
[4] => stdClass Object
(
[dtObj] => 2019-08-13
)
)
这正常吗,PHP是如何工作的?如果要避免这种情况发生,我必须将serialized
数据发送到函数吗?
感谢您的帮助!
答案 0 :(得分:1)
如PHP用户贡献的注释中所述;
使用“->”时,您当然会访问相同的内容 内部函数作为调用程序函数中的原始变量。
然后继续说明各种情况