6

こんにちは、$this について質問があります。

class foo {

    function __construct(){

       $this->foo = 'bar';

    }

}

class bar extends foo {

    function __construct() {

        $this->bar = $this->foo;

    }

}

だろう

$ob = new foo();
$ob = new bar();
echo $ob->bar;

結果はbar??

私はそうなると思ったので尋ねるだけですが、私のスクリプトの一部は私が思っていた結果にならないようです。

4

3 に答える 3

9

PHPマニュアルを引用するには:

注:子クラスでコンストラクターが定義されている場合、親コンストラクターは暗黙的に呼び出されません。親コンストラクターを実行するには、子コンストラクター内でparent::__construct()を呼び出す必要があります。

これは、あなたの例では、のコンストラクターがbar実行されると、のコンストラクターが実行されないfooため、$this->fooまだ未定義であることを意味します。

于 2010-11-07T15:33:13.593 に答える
5

PHP は、子コンストラクターを定義しても親コンストラクターが自動的に呼び出されないという点で少し奇妙です。自分で呼び出す必要があります。したがって、意図した動作を得るには、これを行います

class bar extends foo {

    function __construct() {

         parent::__construct();
         $this->bar = $this->foo;

    }

}
于 2010-11-07T15:33:21.113 に答える
0

foo と bar の両方のインスタンスを作成しません。bar の単一インスタンスを作成します。

$ob = new bar(); 
echo $ob->bar;

他の回答が指摘しているように、 bar コンストラクター内で parent::__construct() を呼び出します

于 2010-11-07T15:34:44.513 に答える