11

我尝试使用父类的名称(如构造函数)并部分为我工作。

第一次调用

“达斯维德法”

像构造函数,但从不调用

“LukeSkywalker 构造函数”..

有人知道怎么做吗?

例子:

达斯.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";
    }
}

卢克.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();
    }
}

预期结果:

  • 欧比旺从来没有告诉过你父亲的遭遇。

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

  • 不,我是你父亲

我真的很想这样,自动。

4

2 回答 2

31

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

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

于 2013-05-09T19:25:06.320 回答
2

默认情况下,永远不会自动调用父构造函数(除非在子类中定义)。即使在 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();

于 2013-05-09T19:23:56.230 回答