在两个不同的类中引用相同的变量

时间:2016-08-08 05:58:35

标签: php reference

<?php

class Foo{
    public $basket;

    public function __construct()
    {
        $this->basket = 1;
    }

    public function getBasket(){
        return $this->basket;
    }
}

class Bar{
    public function __construct(&$basket)
    {
        $basket++;
    }
}

$newFoo = new Foo();
$newBar = new Bar($newFoo->getBasket());

echo $newFoo->getBasket();

?>

我希望在一个类中初始化$basket值并通过另一个类操作相同的变量。不幸的是,我一直得到&#34;注意:只有变量应该通过&#34;中的引用传递。错误信息。

问题:如何更改代码以实现此目的?谢谢。

1 个答案:

答案 0 :(得分:0)

更改

$newBar = new Bar($newFoo->getBasket());

$basket = $newFoo->getBasket();
$newBar = new Bar($basket);

第一种方法不起作用,因为PHP没有任何变量来保存你传递给new Bar()的值。因此,任何东西都不能通过引用传递。

第二种方式有效,因为$basket var是内存中的固定引用,因此可以通过引用传递给new Bar()

你在评论中提问:

  

已将我的代码更改为您的代码。 echo $ newFoo-&gt; getBasket();产生1   (我希望2)。

生成

1是因为每次调用getBasket()都会为您提供类变量的全新副本。我传递给$basket的{​​{1}}等于2,但这不是你所回应的。

如果您希望new Bar()和变量getBasket()的结果在内存中引用相同的引用,则需要进行两项更改:

1 将函数声明更改为:

$basket

2 更改存储功能结果的方式:

public function &getBasket()

现在你的回信将返回$basket = &$newFoo->getBasket(); ,因为你的代码中会有一个独特的篮子引用

See the docs