类成员对PHP中另一个对象的引用


Class member reference to another object in PHP

先编码再提问:

class MyArray
{
    private $arrayRef;
    function __construct(&$array){
        $this->arrayRef = $array;
    }
    function addElement($newElement){
        $this->arrayRef[] = $newElement;
    }
    function print(){
        print_r($this->arrayRef);
    }
}
$array = ['first', 'second'];
$arrayObject = new MyArray($array);
$arrayObject->addElement('third');
print_r($array); // prints array containing 2 elements
echo '<br/>';
$arrayObject->print(); // prints array containing 3 elements

类成员$arrayRef在本例中不能作为构造函数中提供的另一个数组的引用。构造函数中的参数是通过引用传递的,但我想这并没有使成员$arrayRef也成为对该数组的引用。

为什么它不能这样工作,如何使它工作?

如果你还不明白我的意思:第一个print_r打印包含2个元素的数组,即使它可能包含3个元素。当我通过addElement()将第三个元素传递给$arrayObject时,我还希望它被添加到我传递给类的构造函数的$array中。

答案其实很简单。是的,您通过&$array通过引用传递数组,但是当您将其分配/复制到成员变量时,该引用会丢失。为了保持引用,可以使用=&操作符,如

$this->arrayRef =& $array;

看它在这个小提琴上的工作。您可以在这个问题/答案中了解更多信息(只需查找参考)。

注意不要使用&=(按位操作)而不是=&(按引用赋值)。