数组副本中的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