1

私は最近、いくつかの OOP を独学で学ぼうとしており、奇妙に奇妙に思えるものに出くわしました。誰かが私にこれを説明できるかどうか疑問に思っていました。

このサイトの質問の 1 つに触発されて、この小さなテスト コードを (PHP で) 試してみました。

class test1 {
    function foo ($x = 2, $y = 3) {
    return new test2($x, $y);
    }
}

class test2 {
    public $foo;
    public $bar;
    function __construct ($x, $y) {
        $foo = $x;
        $bar = $y;
    }
    function bar () {
        echo $foo, $bar;
    }
}

$test1 = new test1;
$test2 = $test1->foo('4', '16');
var_dump($test2);
$test2->bar();

シンプルなもの。は、4 に等しく 16に等しいオブジェクトをに$test1戻す必要があります。コンストラクター関数は間違いなく実行されています-エコーしてコンストラクター関数に表示すると、それらが表示されます(正しい値で、それ以下ではありません)。しかし、 によって値が割り当てられているにもかかわらず、または を介し​​て表示されません。誰かが私にこのちょっとした知的好奇心を説明できますか?$test2$test2->foo$test2->bar$test2test2$foo$bar$test2NULL$foo$bar$test1->foovar_dump$test2->bar

4

2 に答える 2

5

構文が間違っています。次のようにする必要があります。

class test2 {
    public $foo;
    public $bar;
    function __construct ($x, $y) {
        $this->foo = $x;
        $this->bar = $y;
    }
    function bar () {
        echo $this->foo, $this->bar;
    }
}
于 2012-07-18T21:27:53.267 に答える
2

「this」を使用してクラス メンバーにアクセスする必要があります。

function __construct ($x, $y) {
    $this->foo = $x;
    $this->bar = $y;
}
于 2012-07-18T21:28:05.683 に答える