0
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に等しいのはなぜですか?

プロパティの代わりにメソッドを使用して、参照による受け渡しと参照による戻りを試みています。

4

2 に答える 2

0

これは機能します:

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
        )

)
于 2013-03-14T10:14:46.963 に答える
0

正解は、メソッド$ foo-> value1 =&$v;内の参照です。

于 2013-03-15T12:55:00.687 に答える