class foo {
public $value1 = 1;
public function setValue1(& $v) {
$this->value1 = $v;
}
}
class bar {
public $value2 = 2;
public $obj;
public function & getValue2() {
return $this->value2;
}
public function setValue2($v) {
$this->value2 = $v;
}
}
$foo = new foo();
$bar = new bar();
$bar->obj = $foo;
$foo->setValue1($bar->getValue2()); //<-- not works
//$foo->value1 =& $bar->getValue2(); //<-- works
$bar->setValue2(4);
var_dump($foo, $bar) Prints:
object(foo)[124]
public 'value1' => int 2
object(bar)[123]
public 'value2' => int 4
public 'obj' =>
object(foo)[124]
public 'value1' => int 2
为什么当我使用$ foo-> setValue1($ bar-> getValue2())时,foo-> value1等于2,bar-> value2等于4?如何在两种方法中通过引用传递?
我想通过引用传递和通过引用返回使用方法而不是属性。
请阅读[PHP手册返回引用](http://php.net/manual/en/language.references.return.php),它声明“注意:不像参数传递,在这里你必须使用&在这两个地方 - 表明您希望通过引用而不是副本返回,并指出应该为$ myValue完成引用绑定,而不是通常的赋值。“尝试行'$ foo-> setValue1(&$ bar-> getValue2());' – Jon 2013-03-14 09:56:12
您需要使用方法内的引用$ this-> value1 = &$v; – sectus 2013-03-14 10:07:02
yes!这是正确的答案,谢谢 – 2013-03-14 10:34:01