在子构造函数中调用父构造函数

时间:2017-08-23 11:49:56

标签: php oop inheritance constructor

我很想知道如果只是为了调用父构造函数而创建子类构造函数是个好主意。

class A {
  public function __construct() {
      echo 'I am in: '.__CLASS__.'<br/>';
  }
  public function getData() {
      echo 'I am in: '.__METHOD__.'<br/>';
  }
}

class B extends A {

  public function __construct() {
      parent::__construct();
      echo 'I am in: '.__CLASS__.'<br/>';
  }

  public function getDataFromB(){
      echo 'I am in: '.__METHOD__.'<br/>';
  }
}

$objB = new B();
$objB->getDataFromB();

现在在下面的示例中我们可以实现相同的目标:

class A {
  public function __construct() {
      echo 'I am in: '.__CLASS__.'<br/>';
    }
  public function getData() {
      echo 'I am in: '.__METHOD__.'<br/>';
    }
}

class B extends A {
  public function getDataFromB(){
      echo 'I am in: '.__METHOD__.'<br/>';
    }
}

$objB = new B();
$objB->getDataFromB();

问题:

仅为调用父构造函数创建子构造函数是一个好主意,还是有其它优点呢?

1 个答案:

答案 0 :(得分:2)

类中__construct次调用的行为是:

  1. 如果上课有&#39;拥有__construct - 它将被称为
  2. 如果上课没有&#39;拥有__construct - 父__construct(如果存在)将被调用。
  3. 因此,如果您在子级别中创建__construct,则不会调用父级__construct ,除非您使用parent::__construct()明确指出它。

    因此,如果孩子__construct没有发生任何严重事件 - 你可以省略它,并且会调用父__construct

    另一方面 - 如果您在子__construct中执行其他初始化或其他操作,则除非您明确指出,否则不会调用parent::__construct