2012-04-13 16 views
1

PHPでOOPを使用する上でのハンドルを取得しようとしていますが、私はクラス継承のもののいくつかで困惑しています。PHPクラス変数を設定する

ここでは、私がこれらの仕組みを学ぶために使っているシンプルなクラスをいくつか紹介します。私は単純に子クラスの呼び出し元(親)クラスの変数を設定したいと思います。私が読んだの例から、これは動作するはずのように思えるが、サブクラスは、親変数の設定に失敗した:任意の助け

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!' 

感謝を。

+3

あなたは継承とOOPと非常に混同しているようです。これはどのように動作するのではありません。 – NullUserException

+0

は非常に控えめです。私は、彼がどこに間違っているのか理解できるようにするために、ジュリオコードのメタファを考えようとしています。進行中の作業... –

答えて

6

あなたは継承とOOPと非常に混同しているようです。これはどのように動作するのではありません。

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

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

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

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

parent::setVar('yoyo!');

継承のいいところは、あなたが子クラスでそれらを上書きしない限り、あなたは、デフォルトでは親のメソッドを取得することです。あなたはそれをやっていないので、を使用する必要はありません。$this->setvar()を実行してください。

+0

@ NullUserException--明確な回答をする時間をとってくれてありがとう。分かったと思います。しかし、例えば 'test2'クラスが 'test'クラスを拡張しておらず、まだ 'test'内からインスタンス化されていた場合、 'test2'の中から 'test'クラスの変数にアクセスしたり変更する方法は?これは可能ですか? – julio

+0

@julio 'test2'インスタンスがインスタンス化された' test'インスタンスへの参照を戻す必要があります。 – NullUserException

5

まあ、

$temp = new test2(); 

であなたは、そのクラスの新しいインスタンスを作成しています。彼らはもはや関係がありません。

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

関連する問題