数组副本中的PHP对象
我在PHP中使用数组和对象得到了一个奇怪的行为,我不明白。 也许你们可以帮助我。
创建一个数组,将其复制到另一个数组,更改第二个数组中的值,并且所有内容都如预期的那样:
$array1['john']['name'] = 'foo';
$array2 = $array1;
$array2['john']['name'] = 'bar';
echo $array1['john']['name']; // foo
echo $array2['john']['name']; // bar
现在,如果我使用该数组中的对象执行此操作,则复制数组中的对象会拥有某种引用?
$array3['john']->name = 'foo';
$array4 = $array3;
$array4['john']->name = 'bar';
echo $array3['john']->name; // bar
echo $array4['john']->name; // bar
我会期望与第一个示例中的行为相同,并且我无法在php文档中找到任何有关此内容的信息。 有人可以向我解释或向我发送一个链接,告诉我这是记录在哪里?
谢谢!
对象默认是通过引用传递的。 如果将某个标量值或数组赋值给其他变量,则会将其克隆。 如果分配对象,则只复制引用,但对象不是。
将已创建的类实例分配给新变量时,新变量将访问与分配的对象相同的实例。 将实例传递给函数时,此行为是相同的。 可以通过克隆已经创建的对象的副本。
从http://php.net/manual/en/language.oop5.basic.php
所以,如果你想要另一个对象,你需要调用clone
。
$array4['john'] = clone $array3['john'];
对象在php5中通过引用传递(这通常是您希望传递对象的方式),而数组则不是。
使用克隆http://php.net/manual/en/language.oop5.cloning.php
- 太晚了只有一秒钟了:-) -
尝试使用clone
希望你使用对象。
有人为此写了一个函数,当对象在数组中时。
这里的链接
链接地址: http://www.djcxy.com/p/57943.html上一篇: PHP objects in array copy
下一篇: More About PHP OOP