繁体   English   中英

类成员对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也成为对该数组的引用。

为什么它不能那样工作,以及如何使其工作?

如果您仍然不明白我的意思:first print_r打印包含2个元素的数组,甚至认为它可能预期包含3个元素。当我通过addElement()将第三个元素传递给$ arrayObject时,我也希望将其添加到我传递给类的构造函数的$ array。

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

$this->arrayRef =& $array;

看到它在这个小提琴中起作用。 您可以在此问题/答案中了解更多信息(仅供参考 )。

注意不要使用&= (按位运算)而不是=& (按引用分配)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM