如何在 php 中将 3 个不同的变量(每个形成一个单独的数组)指向同一个对象


How do I point 3 different variables (each form a separate array) to the same object in php?

>我在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