ホームページ >バックエンド開発 >PHPチュートリアル >PHP はサブクラスをインスタンス化するときに親クラスを自動的にインスタンス化しますか?
最初にテストコードを貼り付けてください
リーリー出力結果はabcですが、サブクラスをインスタンス化すると親クラスも自動的にインスタンス化されますか?自動的にインスタンス化されない場合、親クラスの $name に値を割り当てるにはどうすればよいでしょうか?
最初にテストコードを貼り付けてください
リーリー出力結果はabcですが、サブクラスをインスタンス化すると親クラスも自動的にインスタンス化されますか?自動的にインスタンス化されない場合、親クラスの $name に値を割り当てるにはどうすればよいでしょうか?
上記の回答に実名で反対します。
まず結論からお話しましょう:
PHPは継承時に親クラスのメソッドとプロパティをすべて継承します。
権限制御のため、親クラスのプライベートメソッドやプロパティをサブクラスで使用することはできません。
ただし、親クラスで独自のプライベート プロパティを使用しても影響を受けません。
上記のコードを次のように変更します:
リーリー結果を出力する
リーリー一目瞭然。
クラスの継承について十分に学習していないようです。サブクラスは、親クラスの継承されたメンバー属性とメンバー メソッドをすべて継承します。
Call $b->Name(); はクラスBでインスタンス化されたオブジェクト内のNameメンバーメソッドを呼び出すもので、親クラスのsetNameメソッドが継承されます。 setName メソッドがクラス B で記述されているため、クラス B は $this->setName を直接使用して調整できると想像できます。
もう一度例を見てみると、親クラスの private で記述されたプライベート メンバーのプロパティとメソッドは継承されないことがわかります。したがって、親クラスによって公開された setName メソッドはクラス B で呼び出されますが、$this はクラス B で変更されます。 ->name メソッドは実際には単なる新しい属性であり、親クラスで値 'A' が割り当てられた属性ではありません。