Разве конструкторов абстрактного класса неявно не вызывают, когда производный класс инстанцируют?

Возьмите этот пример:

abstract class Base {
    function __construct() {
        echo 'Base __construct<br/>';
    }
}

class Child extends Base {
    function __construct() {
        echo 'Child __construct<br/>';
    }
}

$c = new Child();   

Происходя из среды C#, я ожидаю, что вывод будет

Основа __ конструкция
Ребенок __ конструкция

Однако эффективная выходная мощность справедлива

Ребенок __ конструкция

62
задан 23 February 2010 в 22:21

1 ответ

Если Вам нужно то же поведение как C#, который является родительским конструктором, всегда выполняется перед дочерним конструктором Вы могли создать поддельный класс конструктора для своих дочерних классов и объявить это как абстрактную функцию в Вашем абстрактном родительском классе.

, Например,

abstract class Test{
  abstract public function __childconstruct();
  public function __construct(){
    echo "SOME CODE".PHP_EOL;
    $this->__childconstruct();
  }
}

class TestExtended extends Test{
  public function __childconstruct(){
    echo "SOME OTHER CODE FROM EXTENDED CLASS".PHP_EOL;
  }
}

$a = new TestExtended();

/* SOME CODE
   SOME OTHER CODE FROM EXTENDED CLASS */
3
ответ дан 31 October 2019 в 14:01

Другие вопросы по тегам:

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