2

我在 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 文档中找不到任何关于此的内容。有人可以向我解释一下,或者给我发一个链接到记录的地方吗?

谢谢!

4

3 回答 3

4

默认情况下,对象通过引用传递。如果将某个标量值或数组分配给其他变量,则会克隆它。如果您分配对象,则仅复制引用而不复制对象。

将已创建的类实例分配给新变量时,新变量将访问与分配的对象相同的实例。将实例传递给函数时,此行为是相同的。可以通过克隆来制作已创建对象的副本。

来自http://php.net/manual/en/language.oop5.basic.php

clone所以,如果你想要另一个对象,你需要打电话。

$array4['john'] = clone $array3['john'];
于 2013-01-05T13:08:02.780 回答
0

对象在 php5 中通过引用传递(这通常是您希望传递对象的方式),而不是数组。

使用克隆http://php.net/manual/en/language.oop5.cloning.php

--编辑太晚了 :-) --

于 2013-01-05T13:08:24.807 回答
0

尝试使用clone希望您使用对象。

当对象在数组中时,有人为此编写了一个函数。

这里是链接

于 2013-01-05T13:09:10.630 回答