问题描述
|
我有一个名为display的类,它扩展了Layout类,并扩展了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?
解决方法
如果您的父类中具有
loadHTMLfile
函数,则子类将继承它。因此,您应该能够:
class Display extends Layout {
public function displayData(){
$this->loadHTMLfile(\"afile.html\");
echo $this->saveHTML();
}
}
, __construct()
是在实例化对象时调用的魔术方法。
调用它与使用new
运算符不同。
以我的经验,当需要父类的构造函数时,我只在子类的__construct()
内使用过parent::__construct()
。
, 这是不一样的,因为php中的构造函数不会返回任何内容
, 您通常在子类的构造函数中调用父类的构造函数。您正在使用displayData()
方法调用它。如果您在子类构造函数中执行其他工作,则仅需要在子类构造函数中显式调用父类的构造函数。直接继承而无需更改意味着您无需调用父构造函数。
调用父构造函数不会像实例化对象那样返回值(对象)。