Проблема наследования классов в PHP
Привет семейство stackOverflow:),
У меня есть вопрос, и я не нашел ответа в другом месте. Я пытаюсь объяснить свою проблему.:
У меня есть класс, и если я создам другой класс из него, из этого дочернего класса я не смогу получить доступ к свойствам родителя.
Я сделал что-то не так?
Я попытался скопировать переменную класса в локальную и попытаться вернуть эту локальную переменную, но ни то, ни другое не работает следующим образом 3.
Вот мои примеры.
Сначала я просто создаю объект:
$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 ответов:
Вы неправильно поняли концепцию наследования. Создание экземпляра
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 по конструкторам (иклассам тоже).
Я думаю, что если вы создаете экземпляр test2 в конструкторе test, это не означает, что тест 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 () вне этих классов!
Comments