2011-01-24 70 views
14

我有一个stdClass对象的数组。当我将一个变量赋给一个变量时,它不会复制变量,而是引用原始变量。我的代码是这样的:如何在PHP中显式创建一个变量的副本?

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

第一个回声输出正常值,但第二个回声输出“测试”。即使我设置$row(应该被复制)的属性,它实际上将它设置在原始数组元素上。

这是为什么,我该如何真正创建一个副本,以便修改副本不会修改原来的?

回答

37

使用clone关键字。

$copy = clone $object; 

重要的是要注意的:

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

它带有一个漂亮的魔术方法:

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

相关问题