0

インデックス関数を持つクラスがあり、それを拡張して別のインデックス関数を作成するとします。拡張機能のインデックス関数は、親のインデックス関数を上書きしますか? また、コンストラクトの2番目のクラスでparent::__construct()が正確に何をしているのか?

class someclass
{
    public function index()
    {
        //do something
    }
}

class newclass extends someclass
{
    function __construct()
    {
        parent::__construct();
    }

    public function index()
    {
        //do something
    }
}
4

3 に答える 3

1

簡単なテストを行うことができます

echo "<pre>";
$b = new B();
$b->index();

echo PHP_EOL;

$c = new C();
$c->index();

出力

A.A::__construct
B.B::index <-------------- Parent index overwrite 

A.A::__construct   <------ Still calls it anyway
A.A::index         <------ Calls A:index
C.C::index         <------ Calls B:index 

クラス

class A {

    function __construct() {
        echo __CLASS__, ".", __METHOD__, PHP_EOL;
    }

    public function index() {
        echo __CLASS__, ".", __METHOD__, PHP_EOL;
    }
}
class B extends A {

    function __construct() {
        parent::__construct();
    }

    public function index() {
        echo __CLASS__, ".", __METHOD__, PHP_EOL;
    }
}
class C extends A {

    public function index() {
        parent::index();
        echo __CLASS__, ".", __METHOD__, PHP_EOL;
    }
}
于 2012-11-11T19:32:59.030 に答える
0

インデックス関数を持つクラスがあり、それを拡張して別のインデックス関数を作成するとします。拡張機能のインデックス関数は、親のインデックス関数を上書きしますか?

はい。必要に応じparent::index()て、newclass::indexの定義を呼び出す必要があります。

また、コンストラクトの2番目のクラスでparent::__construct()が正確に何をしているのか?

__construct親クラスでメソッドを定義していないため、PHP エラーが発生します。

親クラスにメソッドがあるかどうかわからない場合 (f.ex. traitの場合)、 を使用してメソッド内で確認できますis_callable('parent::method')

于 2012-11-11T20:03:17.860 に答える
0

コードは次のように機能します。

$someClass = new someClass;
$newClass = new newClass;

$someClass->index(); //this will output what is written in the index function found in someClass
$newClass->index(); //this will output what is written in the index function found in newClass

したがって、 newClass のメソッドは、から呼び出された場合にのみ someClassindex()のメソッドをオーバーライドします。index()index()newClass

2 番目の質問に答えるために、 はが呼び出されたときにparent::__construct()コンストラクト クラスを呼び出します。someClassnewClass

于 2012-11-11T19:38:33.053 に答える