Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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中显式创建变量的副本?_Php_Variables_Reference - Fatal编程技术网

如何在PHP中显式创建变量的副本?

如何在PHP中显式创建变量的副本?,php,variables,reference,Php,Variables,Reference,我有一个stdClass对象数组。当我给变量赋值时,它不是复制变量,而是引用原始变量。我的代码如下: for ( $i = 0, $len = count($rows); $i < $len; $i++ ) { $row = $rows[$i]; echo $rows[$i]->games; $row->games = 'test'; echo $rows[$i]->games; } for($i=0,$len=count($rows);

我有一个stdClass对象数组。当我给变量赋值时,它不是复制变量,而是引用原始变量。我的代码如下:

for ( $i = 0, $len = count($rows); $i < $len; $i++ )
{
    $row = $rows[$i];
    echo $rows[$i]->games;
    $row->games = 'test';
    echo $rows[$i]->games;
}
for($i=0,$len=count($rows);$i<$len;$i++)
{
$row=$rows[$i];
echo$行[$i]->游戏;
$row->games='test';
echo$行[$i]->游戏;
}
第一个回波输出正常值,但第二个回波输出“测试”。即使我在
$row
(应该复制)上设置属性,它实际上是在原始数组元素上设置的

这是为什么?我如何实际创建副本,以便修改副本不会修改原始副本?

使用关键字

需要注意的重要事项:

克隆对象时,PHP5将对对象的所有属性执行浅拷贝。任何引用其他变量的属性都将保留为引用

它有一个很好的神奇方法:

克隆完成后,如果定义了_clone()方法,则将调用新创建的对象的_clone()方法,以允许更改任何必要的属性

$copy = clone $object;