ホームページ >バックエンド開発 >PHPチュートリアル >PHP はサブクラスをインスタンス化するときに親クラスを自動的にインスタンス化しますか?

PHP はサブクラスをインスタンス化するときに親クラスを自動的にインスタンス化しますか?

WBOY
WBOYオリジナル
2016-07-06 13:53:351196ブラウズ

最初にテストコードを貼り付けてください

リーリー

出力結果はabcですが、サブクラスをインスタンス化すると親クラスも自動的にインスタンス化されますか?自動的にインスタンス化されない場合、親クラスの $name に値を割り当てるにはどうすればよいでしょうか?

返信内容:

最初にテストコードを貼り付けてください

リーリー

出力結果はabcですが、サブクラスをインスタンス化すると親クラスも自動的にインスタンス化されますか?自動的にインスタンス化されない場合、親クラスの $name に値を割り当てるにはどうすればよいでしょうか?

上記の回答に実名で反対します。
まず結論からお話しましょう:

  1. PHPは継承時に親クラスのメソッドとプロパティをすべて継承します。

  2. 権限制御のため、親クラスのプライベートメソッドやプロパティをサブクラスで使用することはできません。

  3. ただし、親クラスで独自のプライベート プロパティを使用しても影響を受けません。


証拠

上記のコードを次のように変更します:

リーリー

結果を出力する

リーリー

一目瞭然。

クラスの継承について十分に学習していないようです。サブクラスは、親クラスの継承されたメンバー属性とメンバー メソッドをすべて継承します。

Call $b->Name(); はクラスBでインスタンス化されたオブジェクト内のNameメンバーメソッドを呼び出すもので、親クラスのsetNameメソッドが継承されます。 setName メソッドがクラス B で記述されているため、クラス B は $this->setName を直接使用して調整できると想像できます。

もう一度例を見てみると、親クラスの private で記述されたプライベート メンバーのプロパティとメソッドは継承されないことがわかります。したがって、親クラスによって公開された setName メソッドはクラス B で呼び出されますが、$this はクラス B で変更されます。 ->name メソッドは実際には単なる新しい属性であり、親クラスで値 'A' が割り当てられた属性ではありません。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。