1

ネットで答えを探していたのですが、なかなか見つからなかったので、ここで聞いてみようと思いました。

拡張クラスからその親クラスを介して関数に到達するにはどうすればよいですか?

ベース(親クラス)

require_once('FirstChild.class.php');

require_once('SecondChild.class.php');

class Base {

public $first;

public $second;


function __construct() {

$this->first = new FirstChild();

$this->second = new SecondChild();

}

}

ファースト(子クラス)

class FirstChild extends Base {

public $firstVar;


function __construct() {

$this->firstVar = 'Hello';

}


public function getSecondVar() {

echo parent::$second->getVar();//doesnt work!!?

}

}

2番目(子クラス)

class SecondChild extends Base {

public $secondVar;


function __construct() {

$this->secondVar = 'World';

}


public function getVar() {

return $this->secondVar;

}

}

「FirstChild」内で「getSecondVar」関数に到達するにはどうすればよいですか?

ありがとう!

4

2 に答える 2

1

この方法は使用しないでくださいparent::。代わりに$this->second->getVar();、親コンストラクターも呼び出されていることを確認してください。たとえば、parent::__construct();(または、コンストラクターに$ this-> secondを入力しますFirstChild

例えば

class FirstChild extends Base {
    public function __construct() {
        // your code
        $this->second = new SecondChild();
        $this->firstVar = 'Hello';
    }
    public function getSecondVar() {
        echo $this->second->getVar();
    }
}

編集:また、あなたがそれを設定した$second方法は、コンストラクターメソッドをに追加することによって設定されることは決してありませんFirstChild、あなたはオーバーライドしていますBase::__construct()。を呼び出しparent::__construct()て、の新しいインスタンスが作成されないことを確認するか、のコンストラクターFirstChild()内で同じコードを実行する必要があります。FirstChild

とにかく、通常、親クラスから子クラスを呼び出すことはベストプラクティスではありません。

于 2013-03-10T13:27:50.697 に答える
0

親クラス関数に到達する方法について読んだら、次のようなparentキーワードで機能します。

parent::__construct();

公開されているプロパティについては、次の$secondようにアクセスできます。$this

$this->second;

そして、それはすでにすべてです。親のコンストラクターを呼び出すように注意し、パブリックメンバーはパブリックであることに注意してください(プライベートメンバーに到達することはできません)。

于 2013-03-10T13:42:31.513 に答える