Dis*_*oat 21 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;
}
Run Code Online (Sandbox Code Playgroud)
第一个echo输出正常值,但第二个echo输出"test".即使我在设置属性$row(应该被复制),它实际上是在原始数组元素上设置它.
为什么这样,以及如何实际创建副本,以便修改副本不会修改原始副本?
Pek*_*ica 56
使用clone关键字.
$copy = clone $object;
Run Code Online (Sandbox Code Playgroud)
重要的是要注意:
克隆对象时,PHP 5将执行所有对象属性的浅表副本.任何引用其他变量的属性都将保留引用.
它带有一个很好的魔术方法:
克隆完成后,如果定义了__clone()方法,则将调用新创建的对象的__clone()方法,以允许任何需要更改的必要属性.