<?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;中的引用传递。错误信息。
问题:如何更改代码以实现此目的?谢谢。
答案 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();
,因为你的代码中会有一个独特的篮子引用