2

クラスDOMDocumentを拡張するクラスLayoutを拡張するDisplayという名前のクラスがあります。次のようになります。致命的なエラー:非オブジェクトでメンバー関数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()を呼び出すと、DisplayクラスがLayoutとDOMDocumentを拡張するため、これは「newDOMDocument」を使用するのと同じではありませんか?ありがとうございます

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 に答える