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

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,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

为什么当我使用$foo->setValue1($bar->getValue2())时,foo->value1等于2,而bar->value2等于4


我正在尝试通过引用传递,并使用方法而不是属性通过引用返回。

此方法有效:

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
        )

)