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

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

Править: У меня есть хороший ответ от Lukman, но я надеялся по большему количеству причины, почему существует различие. Возможно, вопрос должен состоять в том, почему C++ не позволяет пользовательский вызов родительских конструкторов? Я предполагаю, что это - другой вопрос все же.

27
задан Skilldrick 18 December 2009 в 13:22
поделиться

2 ответа

Я думаю, что 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();
}

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

25
ответ дан 28 November 2019 в 05:36
поделиться

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

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

.
1
ответ дан 28 November 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: