Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php函数更改oblect的值,即使按值传递_Php - Fatal编程技术网

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))?