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

时间:2016-11-08 22:25:30

标签: php reference

首先是代码,然后是问题:

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时,我也希望将它添加到我传递给类构造函数的$数组中。

1 个答案:

答案 0 :(得分:3)

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

$this->arrayRef =& $array;

this fiddle中查看它的工作原理。您可以在this question/answer中详细了解它(只需查看参考)。

请注意不要使用&=(执行按位操作)而不是=&(通过引用分配)。