新しいオブジェクトが作成されるたびに__constructメソッドが最初に実行されると前述しましたが、継承する場合は、親クラスの_constructメソッドが最初に実行され、次にサブクラスの__constructメソッドが実行されるべきですか?
実験してみましょう:
<code><span><span>class</span><span>Father</span>{</span><span>public</span><span><span>function</span><span>__construct</span><span>()</span>{</span><span>echo</span><span>"father has constructed"</span>; } } <span><span>class</span><span>Child</span>{</span><span>public</span><span><span>function</span><span>__construct</span><span>()</span>{</span><span>echo</span><span>"child has constructed"</span>; } } <span>$c</span> = <span>new</span> Child(); </code>
出力結果は次のとおりです:
子供が組み立てました
サブクラスの作成時に親クラスの __construct メソッドが呼び出されないことがわかります。これは、PHP の上書きメカニズムを使用していることがわかります。実際には、サブクラスのコンストラクターがオーバーライドされています。クラスが実行され、サブクラスのコンストラクターが実行されます。
では、サブクラスが __construct メソッドを記述しない場合はどうなるのでしょうか?実験してみましょう:
<code><span><span>class</span><span>Father</span>{</span><span>public</span><span><span>function</span><span>__construct</span><span>()</span>{</span><span>echo</span><span>"father has constructed"</span>; } } <span><span>class</span><span>Child</span>{</span><span>public</span><span><span>function</span><span>show</span><span>()</span>{</span><span>echo</span><span>"dd"</span>; } } <span>$c</span> = <span>new</span> Child(); <span>$c</span>->show(); 输出结果为:dd</code>
;
出力結果は次のとおりです: dd
これは、親クラスの __construct() が継承されていないことを意味します。
以上、PHP学習メモのオブジェクト指向(4)継承の補足を内容も含めて紹介しましたので、PHPチュートリアルに興味のある友人の参考になれば幸いです。