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

2022-08-30 16:55:47

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

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

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

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


答案 1

使用克隆关键字。

$copy = clone $object;

重要提示:

克隆对象时,PHP 5 将执行对象所有属性的浅层复制。任何引用其他变量的属性都将保持引用。

它带有一个很好的魔术方法:

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


答案 2

推荐