如何解决继承问题:在子类中调用父构造函数
| 我有一个名为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()
方法调用它。如果您在子类构造函数中执行其他工作,则仅需要在子类构造函数中显式调用父类的构造函数。直接继承而无需更改意味着您无需调用父构造函数。
调用父构造函数不会像实例化对象那样返回值(对象)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。