我尝试使用像构造函数这样的父类的名称,并且部分地为我工作。
首先致电
“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();
}
}
预期结果:
欧比万从未告诉过你父亲发生了什么事。
他告诉我够了!他告诉我你杀了他!
没有。我是你的父亲
我真的很想这样,自动。
答案 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();