ホームページ >バックエンド開発 >PHPチュートリアル >わかりにくいPHPの継承問題!
クラス B
{
public $name="aaa"; function fb()
echo get_class($this),""
echo $this->name," br>"; ; xxxxxxxxxxxsylar ";
= new eb(); subclass xxxxxxxxxxxxxxxsylar
// 親クラスと サブクラスの $name が private として宣言されている場合、Eb のコンストラクターが実行されると、出力結果はサブクラス aaa の $name の値になります
解決策は?
ディスカッションへの返信(解決策)
$name を public として宣言すると、当然、サブクラスが親クラスをオーバーライドします
これで問題ないはずですよね?
$name が private として宣言されている場合、メソッド fb は親クラスに属しているため、当然、親クラスのプライベート プロパティにのみアクセスできます
fb メソッドを Eb にコピーし、$this->fb を追加します。 ( in __construct );
真実が明らかになります
これはオーバーロードと呼ばれます
public サブクラスが親クラスから変数名を継承してオーバーロードするため、元の値が上書きされます
private の場合、サブクラスは親をオーバーライドできません。クラス変数の場合、現時点では親クラスの元の値のみを出力できます。
1. プライベート属性は上書きできません。
2. サブクラスが親クラスのプライベート属性を呼び出すと、もちろん親クラスのものが直接出力されます。