php函数更改oblect的值,即使按值传递
我遇到了这个问题,并最终追踪到php函数更改oblect的值,即使按值传递,php,Php,我遇到了这个问题,并最终追踪到对象函数内部更改的值会影响函数外部的对象 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
对象
函数内部更改的值会影响函数外部的对象
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);
这正常吗?PHP是如何工作的?如果我想避免这种情况发生,我必须将序列化的
数据发送到函数
谢谢你的帮助 如PHP用户投稿说明所述 使用“->”时,您当然会访问相同的 作为调用者函数中的原始变量的内部构件
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);
整个评论必须阅读:
然后它继续说明各种场景对象是通过引用传递的,所以这是应该的。至少有两种方法可以避免这种情况,但这在某种程度上取决于您实际尝试执行的操作使用一个副本,但是如果你有嵌套的对象,你需要阅读克隆是如何工作的。手册的这一部分解释了这是如何工作的,是的,这是正常的行为。到底是什么问题?有一件事是$x是未定义的,也许这就是你的问题所在<代码>如果(!isset($x))?