如果我没有为子类定义构造函数,我可以直接使用超类的构造函数吗?

时间:2011-11-21 08:59:53

标签: php oop inheritance constructor

构造函数是继承的还是属于它们所定义的类?我只看到了子类构造函数的例子,它们调用了超类的构造函数。这是我目前的代码,它可以提供一些有关正在发生的事情的提示。 (我将根据您的回复更改代码。如果我可以使用超类的构造函数,我将不为每个子类定义构造函数,并从每个子类调用超类的构造函数。

abstract class view
{
 public $vieverid;

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

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

3 个答案:

答案 0 :(得分:4)

根据我的理解,如果定义了子构造函数,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;
 }

答案 1 :(得分:3)

parent::__construct(params);用于调用超类构造函数

  

PHP4

     

PHP不会自动调用基类的构造函数   派生类的构造函数。繁殖是你的责任   适当时对上游构造函数的调用。

     

PHP5

     

如果定义了新的构造函数,PHP不会调用基类的构造函数。   如果为派生类定义构造函数   繁殖是你的责任   适当时对上游构造函数的调用。   父:: __构建体(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
}

答案 2 :(得分:1)

如果子类定义了构造函数,则不会隐式调用父构造函数。为了运行父构造函数,需要在子构造函数中调用parent :: __ construct()。

See here