Почему PHP не автоматически вызывает родительские конструкторы?

Довольно простой вопрос. В C ++ родительский конструктор будет неявно вызываться перед дочерним конструктором, так какая же логика для PHP не делать так?

EDIT: У меня есть хороший ответ от Лукмана, но я надеялся, что побольше причин, почему есть разница. Может быть, вопрос в том, почему C ++ не позволяет настраивать вызов родительских конструкторов? Наверное, это другой вопрос.

Я думаю, что это хорошо, что PHP заставляет вас вызвать конструктор родителя вручную, потому что он позволяет конструктору ребенка, например:

public function __construct() { // set up variables that parent::__construct() requires $var1 = get_stuff_from_db(); $var2 = get_stuff_from_webservice(); parent::__construct($var1, $var2); // continue setting up $this var $this->default = 'Default'; $this->do_some_secret_stuff(); } 

Или даже:

 public function __construct($param) { // call differently based on condition if (is_array($param)) $param['id'] = 0; parent::__construct($param); } else { parent::__construct($param, 0, TRUE); } // continue setting up $this var $this->default = 'Default'; $this->do_some_secret_stuff(); } 

Значит, вы можете вызвать родительский конструктор в любом месте дочернего элемента, и вы можете делать что-то до и после вызова. Разве это не особенность?

Когда у вас нет конструктора в дочернем классе, автоматически вызывается родительский.

Если вы решили добавить конструктор к дочернему классу, то, конечно, вам нужно явно вызвать родительский конструктор. Если вы уже нашли время, чтобы добавить конструктор к вашему дочернему классу, добавив еще одну строку кода parent::__construct(); похоже, не имеет большого значения. Но переопределение на самом деле является удобной гибкостью.

чтобы избежать сложной связи, поэтому наследование (расширение ключевого слова в java) является злом, а класс интерфейса предпочтительнее, см. статью Javaworld: http://www.javaworld.com/javaworld/jw-08-2003/jw-0801-toolbox.html

Тем не менее было бы здорово, если бы в какой-то момент было какое-то указание назвать родителя специальным ключевым словом, например forward, но я еще не видел его ни на одном языке (даже в Rebol), кроме как на незнакомом языке, изобретенном Полом Алленом (да, – основатель Microsoft), который является Openscript.