1

私はPHPでOOPを使用する方法を理解しようとしていますが、クラス継承に関するもののいくつかに少し困惑しています。

これらがどのように機能するかを学ぶために私が使用しているいくつかの簡単なクラスがあります。子クラスから呼び出し側(親)クラスに変数を設定したいだけです。私が読んだ例から、これは機能するはずですが、サブクラスは親変数を設定できません。

class test {
    private $myvar;
    private $temp;

    function __construct(){
        $this->myvar = 'yo!';
        $temp = new test2();
        $temp->tester();
        echo $this->myvar;
    }

    public function setVar($in){
        $this->myvar = $in;
    }

}

class test2 extends test{
    function __construct(){

    }

    public function tester(){
        parent::setVar('yoyo!');
    }

}


$inst = new test(); // expecting 'yoyo!' but returning 'yo!'

助けてくれてありがとう。

4

2 に答える 2

6

継承と OOP について非常に混乱しているようです。これは、それがどのように機能するかではありません。

子クラスから呼び出し元 (親) クラスに変数を設定するだけです。

これは、いくつかの理由で不可能です。

まず、 を使用すると、クラスnewの新しいインスタンスが作成されます。各インスタンスは、プロパティが結合されないという意味で、互いに独立しています。

また、子クラスがある場合は、親からプロパティとメソッドを継承します。ただし、そのインスタンスを作成すると、それは親クラスではなく、子クラスのインスタンスになります。私はあなたがそこで達成したいことはしません。

parent::setVar('yoyo!');

継承の良いところは、子クラスでオーバーライドしない限り、デフォルトで親のメソッドを取得できることです。あなたはそれをしていないので、 を使用する必要はありparent::setVar()ません$this->setvar()

于 2012-04-13T17:32:14.103 に答える
5

さて、と

$temp = new test2();

そのクラスの新しいインスタンスを作成しています。それらはもはや関連していません。

継承は、クラス階層の個々のインスタンスにのみ影響します。

于 2012-04-13T17:23:57.000 に答える