2

こんにちはstackOverflowファミリー:)、

質問がありますが、他の場所で答えが見つかりませんでした。私は自分の問題を説明しようとしています。クラスがあり、それから他のクラスを作成すると、その子クラスから親のプロパティにアクセスできませんでした。私は何か悪いことをした?クラス変数をローカルにコピーして、そのローカル変数を返そうとしましたが、どちらも次の3つの方法で機能しません。

これが私の例です。最初は、オブジェクトを簡単に作成します。

$test = new test();

そして私の2つのクラスは次のとおりです。

class test {

    public $testvar;

    public function __construct() {
        $this->testvar = 1234568;
        echo ":) ".$this->testvar();
        $test2 = new test2();
}

    public function testvar() {
        echo "testvar() called > ";
        return $this->testvar;
    }
}

そしてtest2:

class test2 extends test  {

    public function __construct() {
        echo "<br>:| this-> ".$this->testvar;
        echo "<br>:| parent:: ". parent::testvar();
        echo "<br>:| "; $this->testvar();
    }

}

誰かがアイデアを持っていますか?どうも

4

2 に答える 2

6

あなたは継承の概念を誤解しました。test2のコンストラクター関数でのインスタンス化testは継承ではありません。

のコンストラクターがtest呼び出されtestvarなかったため、設定されませんでした。$test2 = new test2();のコンストラクタから削除しtestます。試す:

class test {

    public $testvar;

    public function __construct() {
        $this->testvar = 1234568;
        echo ":) ".$this->testvar();
}

    public function testvar() {
        echo "testvar() called > ";
        return $this->testvar;
    }
}

class test2 extends test  {

    public function __construct() {
        parent::__construct();
        echo "<br>:| this-> ".$this->testvar;
        echo "<br>:| "; $this->testvar();
    }

}

$test2 = new test2();

コンストラクター(およびクラスも)に関するPHPマニュアルも参照してください。

于 2011-07-23T10:48:49.097 に答える
0

テストのコンストラクターで test2 をインスタンス化しても、作成したコンテキストでテスト 2 がインスタンス化されるわけではないと思います。つまり、設定した変数は test2 で使用できません:) ...私は絶対に技術者になるべきではありません:-D

test2 は次のようになります。

class test2 extends test  {

public function __construct() {
    parent::__construct();
    echo "<br>:| this-> ".$this->testvar;
    echo "<br>:| parent:: ". parent::testvar();
    echo "<br>:| "; $this->testvar();
  }
}

そしてテストコンストラクター:

public function __construct() {
    $this->testvar = 1234568;
    echo ":) ".$this->testvar();
}

そして、これらのクラスの外で new test2() を呼び出します!

于 2011-07-23T10:54:35.827 に答える