- class Animal {
- protected $what = "nothing";
- function sound() {
- echo get_class($this)." says {$this->what}";
- }
- }
- class Cow extends Animal {
- protected $what = "moo";
- protected $owner;
- public function __construct($owner) {
- // parent::__construct(); (?)
- $this->owner = $owner;
- }
- }
- $a = new Cow("Old McDonald");
- $a->sound();
Теперь посмотрим на 12-ую строку кода отмеченную (?). Конечно, в данном случае мы можем не вызывать родительский конструктор, но...
Предположим, со временем мы дополнили родительский класс:
- class Animal {
- protected $born;
- public function __construct() {
- $this->born = time();
- }
- }
Мы могли бы избежать этой проблемы, если бы придерживались простого правила: вставлять вызов родительского конструктора, даже когда он пустой. Если родительский конструктор не определен, то вызов parent::__construct() не будет делать ровным счетом ничего. Но, если мы когда либо внедрим родительский конструктор, все наши дочерние классы будут готовы.