PHP在推送元素时创建新实例

时间:2013-08-08 08:34:02

标签: php arrays reference

为什么PHP在推送元素时会创建一个新数组?

$a = array();
$b = $a;

$b[] = "Hello!";
echo count($a);
echo count($b);

在这里,您可以预期$ a和$ b的计数相等,但它们不是。

2 个答案:

答案 0 :(得分:3)

默认情况下,PHP在分配值时会复制值。如果您想要参考,可以使用& operator

$a = array();
$b = &$a;

$b[] = "Hello!";
echo count($a);  // prints 1
echo count($b);  // prints 1

答案 1 :(得分:0)

这是因为$a$b是两个独立的变量,当您分配$b = $a时,您只是将$a的内容复制到$b,而不是$b = &$a; 使它们都指向同一个数组。

为此,您需要通过引用传递:

{{1}}

在这种情况下,$ b指向$ a的引用,这意味着它们都指向同一个数组,对它们的任何更改都将在两者上发生变化。