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

问题描述:

我尝试使用构造函数的父类名称,并部分为我工作。在子节点后自动调用父构造函数PHP

“达斯·维达法”

像构造函数,但从来没有首先调用来电

“卢克·天行者构造” ..

有人知道如何做它?

例如:

Darth.php

​​

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

嘿,现在 - 剧透! :D – andrewsi 2013-05-09 19:21:16

+0

我找到了“卢克天行者构造函数”没有运行的原因。只是。是“__construc”,而不是“__constructor”,这支持@Marc B的理论。谢谢你们 – iLevi 2013-05-09 22:25:47

按照文档:http://php.net/manual/en/language.oop5.decon.php

注:父构造函数不如果子类定义了一个构造函数,则隐式调用。为了运行父构造函数,需要在子构造函数中调用parent :: __ construct()。如果孩子没有定义一个构造函数,那么它可能像父类一样继承父类(如果它没有被声明为私有的)。

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

+8

除了默认情况下,他们被自动调用,除非他们是在孩子中定义的。 – Frug 2014-01-14 20:50:45