Почему защищенная переменная родительского класса пуста?

Я получил защищенную переменную в классе Father , содержимое этой переменной изменится в классе Father но мне нужно использовать эту переменную в подклассах, то есть:

 class Father { protected $body; function __construct(){ $this->body = 'test'; } } class Child extends Father{ function __construct(){ echo $this->body; } } $c = new Father(); $d = new Child(); 

Почему переменное body пуста? Если я объявляю его статичным, то должен ли я объявлять все переменные как статические, если я хочу получить доступ и изменить их в подклассах?

Solutions Collecting From Web of "Почему защищенная переменная родительского класса пуста?"

Вы должны вызвать родительский конструктор.

 class Father { protected $body; function __construct(){ $this->body = 'test'; } } class Child extends Father { function __construct(){ parent::__construct(); echo $this->body; } } $c = new Father(); $d = new Child(); 

Ссылка: http://php.net/manual/en/language.oop5.decon.php

Это связано с тем, что вы переопределяете функцию конструктора. Вы также должны вызвать конструктор родителя. Больше информации

 class Child extends Father { function __construct() { parent::__construct(); echo $this->body; } }