Если я не определяю конструктор для подкласса, могу ли я использовать конструктор суперкласса напрямую? - PullRequest
6 голосов
/ 21 ноября 2011

Унаследованы ли конструкторы или они принадлежат к классу, в котором они определены?Я видел только примеры с конструкторами подклассов, которые вызывают конструкторы суперкласса.Это мой текущий код, который может дать подсказку о том, что происходит.(Я изменю код в соответствии с вашими ответами. Если я смогу использовать конструктор суперкласса, я не буду определять конструктор для каждого подкласса и вызывать конструктор суперкласса из каждого.

abstract class view
{
 public $vieverid;

 function __construct($viewerid) {
  $this->viewer = $viewerid;
 }
}
class viewactor extends view{

 function __construct($viewerid) {
  $this->viewerid = $viewerid;
 }

Ответы [ 3 ]

4 голосов
/ 21 ноября 2011

Насколько я понимаю, PHP не вызывает автоматически родительский конструктор, если определен дочерний конструктор. В противном случае это так.

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

abstract class view
{
 public $vieverid;

 function __construct($viewerid) {
  $this->viewer = $viewerid;
 }
}
class viewactor extends view{

 function __construct($viewerid) {
  parent::__construct($viewerid); // manual call
  // do your stuff here...
  $this->viewerid = $viewerid;
 }
3 голосов
/ 21 ноября 2011

parent::__construct(params); используется для вызова конструктора суперкласса

PHP4

PHP не вызывает конструкторы базового класса автоматически из конструктора производного класса.Вы несете ответственность за распространение вызова на конструкторы, если это необходимо.

PHP5

PHP не вызывает конструкторы базового класса, если определен новый конструктор.Если вы определяете конструктор для производного класса, вы несете ответственность за распространение вызова на конструкторы, если это необходимо.parent :: __ construct (params)

Конструкторы

abstract class view
{
 public $vieverid;

 function __construct($viewerid) {
  $this->vieverid= $viewerid;
 }
}

class viewactor extends view{

 function __construct($viewerid) {
   parent::__construct($viewerid);
   // Extra code if you want
 }
}

class viewactor_construct extends view{
    // Works in PHP5
}
1 голос
/ 21 ноября 2011

Родительские конструкторы не вызываются неявно, если дочерний класс определяет конструктор. Для запуска родительского конструктора требуется вызов метода parent :: __ construct () внутри дочернего конструктора.

Смотрите здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...