2

我有一个名为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?谢谢

4

4 回答 4

3

__construct()是在实例化对象时调用的魔术方法。

调用它使用new运算符不同。

以我的经验,当我需要调用父类的构造函数时,我只在子类parent::__construct()内部使用过。__construct()

于 2011-06-10T01:00:26.347 回答
2

如果您loadHTMLfile的父类中有该函数,则子类将继承它。所以你应该能够做到:

class Display extends Layout {

    public function displayData(){

        $this->loadHTMLfile("afile.html");
        echo $this->saveHTML();

    }

}
于 2011-06-10T01:09:53.287 回答
1

这是不一样的,因为 php 中的构造函数不返回任何内容

于 2011-06-10T01:00:26.120 回答
1

您通常在子类的构造函数中调用父构造函数。你在displayData()方法中调用它。如果在子类构造函数中做了额外的工作,只需要在子类构造函数中显式调用父类的构造函数。直接继承它而不进行更改意味着您不需要调用父构造函数。

调用父构造函数不会像实例化对象那样返回值(对象)。

于 2011-06-10T01:02:02.360 回答