我有一个名为显示的类,它扩展了类布局,扩展了类 DOMDocument 。我得到:致命错误:在非对象上调用成员函数loadHTMLFile()。代码如下:
在index.php中:
$dom = new Display();
$dom->displayData();
在Display.php中:
class Display extends Layout {
public function displayData(){
$dom = parent::__construct();
$dom->loadHTMLfile("afile.html");
echo $dom->saveHTML();
}
}
我的问题是:当我调用 parent :: __ construct()时,这与使用“ new DOMDocument ”不一样,因为Display类扩展了Layout和DOMDocument?谢谢
答案 0 :(得分:3)
__construct()
是一种在实例化对象时调用的魔术方法。
调用它不与使用new
运算符相同。
根据我的经验,当我需要调用父类的构造函数时,我只在子类的parent::__construct()
内使用__construct()
。
答案 1 :(得分:2)
如果父类中有loadHTMLfile
函数,子类将继承它。所以你应该能够做到:
class Display extends Layout {
public function displayData(){
$this->loadHTMLfile("afile.html");
echo $this->saveHTML();
}
}
答案 2 :(得分:1)
它不一样,因为php 中的构造函数不返回任何内容
答案 3 :(得分:1)
您通常在子类的构造函数中调用父级的构造函数。您是在displayData()
方法中调用它。如果在子类构造函数中执行其他工作,则只需要在子类构造函数中显式调用父构造函数。直接继承而不进行更改意味着您无需调用父构造函数。
调用父构造函数不会返回值(对象),因为实例化对象会。