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

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

最佳答案

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

$this->arrayRef =& $array;

查看它在 this fiddle 中工作.您可以在 this question/answer 中阅读更多相关信息(仅供引用)。

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

关于php - 类成员对 PHP 中另一个对象的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40497487/

相关文章:

perl - 如何在 Perl 中使用数组引用中的索引作为方法引用?

c++ - 顶部然后流行使用

php - 如何将 bool 参数传递给函数以充当开关?

php - 通过 pecl 安装 pdo 时失败

vb.net:获取引用项目的资源

c++ - 重载的构造函数全部显示,而不仅仅是目标构造函数

mysql - 创建 FOREIGN KEY 时出错

javascript - 使用 javascript 和 php 的随机代码

php - 使用 PHP 从数据库中获取一个变量

php - 将不带列标题的 .csv 文件上传到 PHP MySQL 数据库