在子PHP之后自动调用父构造函数

时间:2013-05-09 19:20:23

标签: php oop inheritance constructor parent-child

我尝试使用像构造函数这样的父类的名称,并且部分地为我工作。

首先致电

  

“DarthVader方法”

喜欢构造函数,但从不调用

  

“LukeSkywalker构造函数”..

有人知道怎么做?

  

示例:

Darth.php

class DarthVader{
    public function DarthVader(){
        echo "-- Obi-Wan never told you what happened to your father.\n";
    }
    public function reponse(){
        echo "-- No. I am your father\n";
    }
}

Luke.php

include("Darth.php")

class LukeSkywalker extends DarthVader{
 public function __constructor(){
        echo "- He told me enough! He told me you killed him!\n"
        $this->response();
    }
}
  

预期结果:

  • 欧比万从未告诉过你父亲发生了什么事。

  • 他告诉我够了!他告诉我你杀了他!

  • 没有。我是你的父亲

我真的很想这样,自动。

2 个答案:

答案 0 :(得分:28)

根据文档:http://php.net/manual/en/language.oop5.decon.php

  

注意:如果子类定义了构造函数,则不会隐式调用父构造函数。为了运行父构造函数,需要在子构造函数中调用parent :: __ construct()。如果子节点没有定义构造函数,那么它可以像普通类方法一样从父类继承(如果它没有被声明为私有)。

答案 1 :(得分:3)

默认情况下,永远不会自动调用父构造函数(除非在子类中定义)。即使在Java中,您也必须明确地调用它们,它必须是第一个声明。

注意,在PHP中,构造函数的名称是__construct,它应该是一个魔术方法,因为它是在创建对象时调用的。

class LukeSkywalker extends DarthVader{
  public function __construct(){ //See the name of magic  method. It is __construct
    parent::__construct(); //Call parents constructor
    echo "- He told me enough! He told me you killed him!\n"
    $this->response();
  }
}

使用上面的代码,每次执行时都会得到所需的结果:

new LukeSkywalker();