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

28

我有一个stdClass对象数组。当我将其中一个分配给一个变量时,它并没有复制变量,而是引用了原始变量。我的代码如下:

for ( $i = 0, $len = count($rows); $i < $len; $i++ )
{
    $row = $rows[$i];
    echo $rows[$i]->games;
    $row->games = 'test';
    echo $rows[$i]->games;
}

第一个echo输出正常的值,但第二个echo输出"test"。尽管我在$row上设置属性(应该复制),但实际上它是在原始数组元素上进行设置。

为什么会这样,并且我如何创建一个副本,以便修改副本不会修改原始内容?

1个回答

72

使用clone关键字。

$copy = clone $object;

需要注意的是:

当一个对象被克隆时,PHP 5将对所有对象属性执行浅拷贝。任何引用其他变量的属性将保持引用关系。

这里还有一个神奇的方法:

一旦克隆完成,如果定义了__clone()方法,则新创建的对象的__clone()方法将被调用,以允许更改需要更改的任何属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接