PHP Доступ к переменной родительского класса

class A { private $aa; protected $bb = 'parent bb'; function __construct($arg) { //do something.. } private function parentmethod($arg2) { //do something.. } } class B extends A { function __construct($arg) { parent::__construct($arg); } function childfunction() { echo parent::$bb; //Fatal error: Undefined class constant 'bb' } } $test = new B($some); $test->childfunction(); 

Вопрос: Как отобразить родительскую переменную в дочернем? ожидаемый результат будет отражать «родительский bb»

     echo $this->bb; 

    Переменная наследуется и не является частной, поэтому она является частью текущего объекта.


    Ниже приведена дополнительная информация в ответ на ваш запрос для получения дополнительной информации об использовании parent::

    Использовать parent:: если вы хотите добавить дополнительные функции к методу из родительского класса. Например, представьте себе класс Airplane :

     class Airplane { private $pilot; public function __construct( $pilot ) { $this->pilot = $pilot; } } 

    Теперь предположим, что мы хотим создать новый тип самолета, который также имеет навигатор. Вы можете расширить метод __construct (), чтобы добавить новую функциональность, но все же использовать функциональные возможности, предлагаемые родителем:

     class Bomber extends Airplane { private $navigator; public function __construct( $pilot, $navigator ) { $this->navigator = $navigator; parent::__construct( $pilot ); // Assigns $pilot to $this->pilot } } 

    Таким образом, вы можете следовать принципу DRY разработки, но при этом предоставить все необходимые функции.

     class A { private $aa; protected $bb = 'parent bb'; function __construct($arg) { //do something.. } private function parentmethod($arg2) { //do something.. } } class B extends A { function __construct($arg) { parent::__construct($arg); } function childfunction() { echo parent::$this->bb; //works by M } } $test = new B($some); $test->childfunction();` 

    Просто повторите его, так как он унаследован

     echo $this->bb; 

    С parent::$bb; вы пытаетесь получить статическую константу, определенную со значением $bb .

    Вместо этого выполните:

     echo $this->bb; 

    Примечание: вам не нужно вызывать parent::_construct если B – единственный класс, который его вызывает. Просто не объявляйте __construct в классе B.

    $ bb теперь стал частным членом класса B после расширения класса A, где он был защищен.

    Таким образом, вы получаете доступ к $ bb, как к атрибуту класса B.

     class A { private $aa; protected $bb = 'parent bb'; function __construct($arg) { //do something.. } private function parentmethod($arg2) { //do something.. } } class B extends A { function __construct($arg) { parent::__construct($arg); } function childfunction() { echo $this->bb; } } $test = new B($some); $test->childfunction(); 

    все свойства и методы родительского класса наследуются в дочернем классе, поэтому теоретически вы можете получить к ним доступ в дочернем классе, но будьте осторожны с использованием protected ключевого слова в своем классе, потому что он генерирует фатальную ошибку при использовании в дочернем классе.
    как упоминалось в php.net

    Видимость свойства или метода может быть определена путем префикса декларации ключевыми словами public, protected или private. К членам класса, объявленным публичными, можно получить доступ во всех странах. Доступ к элементам, объявленным защищенными, может быть доступен только внутри самого класса и наследуемых и родительских классов. Участникам, объявленным как private, может быть доступен только класс, определяющий участника.