Проблема наследования классов в 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
638   2  

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

    Ничего не найдено.