Проблема наследования классов в PHP - PullRequest
2 голосов
/ 23 июля 2011

Привет stackOverflow Family:),

У меня есть вопрос, и я не нашел ответа в другом месте.Я пытаюсь объяснить мою проблему: у меня есть класс, и если я создаю из него другой класс, из этого дочернего класса я не могу получить доступ к свойствам родителя.Я сделал что-то не так?Я попытался скопировать мою переменную класса в локальную и попытаться вернуть эту локальную переменную, но ни один из них не работает следующим образом.

Вот мои примеры.Сначала я просто создаю объект:

$test = new test();

И у меня есть два следующих класса:

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();
    }

}

Может кто-нибудьидея?Thx

Ответы [ 2 ]

6 голосов
/ 23 июля 2011

Вы неправильно поняли концепцию наследования.Создание экземпляра 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 по конструкторам классы тоже).

0 голосов
/ 23 июля 2011

Полагаю, если вы создаете экземпляр test2 в конструкторе теста, это не значит, что тест 2 создается в контексте, который вы создали, а это значит: переменные, которые вы устанавливаете, недоступны для test2 :) ... я определенно не должен становиться techear: -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 () вне этих классов!

...