>我在PHP手册中找到了"通过引用分配"部分。我想知道这是否适用于数组和对象。
据我了解,第 5 行会将三个变量变成数组。第 6 行将使每个数组 [0] 是一个新的类 A 而不是相同的类 A(这意味着在第 8 行之后,$arr2[0]->a
仍然是 1)。
1 class A {
2 public a = 1;
3 }
4
5 $arr1 = $arr2 = $arr3 = array();
6 $arr1[0] = $arr2[0] = $arr3[0] = new A();
7
8 $arr1[0]->a = 2;
如果我使用第 8 行,$arr2[0]->a
和 $arr3[0]->a
都等于 2,我如何重写第 6 行以使其如此?我想保持构造函数内联而不这样做:
$obj = new A();
$arr1 = $arr2 = $arr3 = array();
$arr1[0] = $arr2[0] = $arr3[0] = &$a;
$arr1[0]->a = 2;
在玩了一会儿代码之后。这是解决方案:
class A {
public $a = 1;
}
$arr1 = $arr2 = $arr3 = array();
//This way works (I think I am going to use this, because it matches the manual)
$arr1[0] = $arr2[0] = $arr3[0] = &new A();
//This way also works
$arr1[0] = $arr2[0] = $arr3[0] = new A();
echo "1: " . $arr1[0]->a . "<br>";
echo "2: " . $arr2[0]->a . "<br>";
echo "3: " . $arr3[0]->a . "<br><br>";
$arr1[0]->a = 2;
echo "1: " . $arr1[0]->a . "<br>";
echo "2: " . $arr2[0]->a . "<br>";
echo "3: " . $arr3[0]->a . "<br>";
两种方式都会产生这个:
1: 1
2: 1
3: 1
1: 2
2: 2
3: 2