20

PHPコンストラクタとデストラクタのドキュメントでは、それは述べています

注:子クラスでコンストラクターが定義されている場合、親コンストラクターは暗黙的に呼び出されません。親コンストラクターを実行するには、子コンストラクター内で parent::__construct() を呼び出す必要があります。

しかし、子クラスがコンストラクターを呼び出さない場合、親コンストラクターは引き続き呼び出されるのでしょうか? それとも、とにかく親コンストラクターを呼び出すコンストラクターを作成する必要がありますか?

いいえ:

class BaseClass {
   function __construct() {
       print "In BaseClass constructor\n";
   }
}

class SubClass extends BaseClass {
   function __construct() {
       parent::__construct();
   }
}
4

2 に答える 2

19

たぶんこれは当たり前のことかもしれませんが、周りを見回しました.この質問に対する直接的な答えは驚くほど簡単に見つけることができなかったので、ここにあります:

子クラスがコンストラクターを定義していない場合、親コンストラクターが呼び出されます。

以下の例では、SubClass がコンストラクターを呼び出したことがないため、$obj は引き続き BaseClass からコンストラクターを呼び出します。

class BaseClass {
    function __construct() {
       print "In BaseClass constructor\n";
    }
}

class SubClass extends BaseClass {
    //I do not have a constructor :(
}

$obj = new SubClass();
于 2012-10-29T00:43:09.020 に答える
6

コンストラクターは、他のメソッドと同様にオーバーライドできるメソッドであることを考慮してください。親クラスにコンストラクターがある場合、そのすべての子クラスはそのコンストラクターを継承します。子がコンストラクターをオーバーライドする場合、これは新しいオブジェクトを作成するときに使用され、親のコンストラクターは暗黙的に呼び出されません。子がコンストラクターをオーバーライドしない場合、親のコンストラクターが使用されます。この概念は多重継承に適用されます。

于 2012-10-29T01:04:18.287 に答える