Php 在两种方法中如何通过引用传递? class-foo{ 公共价值1=1; 公共功能设置值1(&$v){ $this->value1=$v; } } 分类栏{ 公共价值2=2; 公共预算$obj; 公共函数&getValue2(){ 返回$this->value2; } 公共功能设置值2($v){ $this->value2=$v; } } $foo=新foo(); $bar=新的bar(); $bar->obj=$foo; $foo->setValue1($bar->getValue2())//value1=&$bar->getValue2()//设定值2(4); 变量转储($foo,$bar)打印: 对象(foo)[124] 公共“价值1”=>int 2 对象(条)[123] 公共“价值2”=>int 4 公共“obj”=> 对象(foo)[124] 公共“价值1”=>int 2
为什么当我使用$foo->setValue1($bar->getValue2())时,foo->value1等于2,而bar->value2等于4Php 在两种方法中如何通过引用传递? class-foo{ 公共价值1=1; 公共功能设置值1(&$v){ $this->value1=$v; } } 分类栏{ 公共价值2=2; 公共预算$obj; 公共函数&getValue2(){ 返回$this->value2; } 公共功能设置值2($v){ $this->value2=$v; } } $foo=新foo(); $bar=新的bar(); $bar->obj=$foo; $foo->setValue1($bar->getValue2())//value1=&$bar->getValue2()//设定值2(4); 变量转储($foo,$bar)打印: 对象(foo)[124] 公共“价值1”=>int 2 对象(条)[123] 公共“价值2”=>int 4 公共“obj”=> 对象(foo)[124] 公共“价值1”=>int 2,php,oop,reference,Php,Oop,Reference,为什么当我使用$foo->setValue1($bar->getValue2())时,foo->value1等于2,而bar->value2等于4 我正在尝试通过引用传递,并使用方法而不是属性通过引用返回。此方法有效: class foo { public $value1 = 1; public function setValue1(& $v) { $this->value1 = $v; } } class bar { publi
我正在尝试通过引用传递,并使用方法而不是属性通过引用返回。此方法有效:
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->value1=&$v中的引用 请阅读,它声明“注意:与参数传递不同,这里您必须在两个位置使用&来指示您希望通过引用而不是副本返回,并且指示应该为$myValue执行引用绑定,而不是通常的赋值。”请尝试以下行
$foo->setValue1(&$bar->getValue2())代码>您需要在方法$this->value1=&$v内使用引用;对这是正确的答案,谢谢猎豹,@Jon,请阅读这里的注释:$foo->setValue1(&$tmp)//
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;
$tmp =& $bar->getValue2(); // <-- !
$foo->setValue1( &$tmp ); // <-- !
$bar->setValue2( 4 );
echo "<pre>" . print_r( $foo, 1 ) . "</pre>";
echo "<pre>" . print_r( $bar, 1 ) . "</pre>";
foo Object
(
[value1] => 4
)
bar Object
(
[value2] => 4
[obj] => foo Object
(
[value1] => 4
)
)