PHP の継承に関する理解しにくい問題

WBOY
リリース: 2016-06-13 12:52:24
オリジナル
861 人が閲覧しました

わかりにくいPHPの継承問題!
クラス B
{
public $name ="aaa";
関数 fb()
{
echo get_class($this),"
";
echo $this->name,"
";
}
}
                                                 クラス Eb は B
を拡張します {
public $name = "xxxxxxxxxxxxxxsylar";
                                                                        関数 __construct()
{
parent::fb();
}
}

                                                 $eb = new Eb();


// 親クラスとサブクラスの $name が両方とも public として宣言されている場合、Eb のコンストラクターが実行されると、出力結果はサブクラスの $name の値 xxxxxxxxxxxxxxsylar
// 親クラスとサブクラスの $name が両方とも private として宣言されている場合、Eb のコンストラクターを実行し、出力結果はサブクラス aaa
の $name の値になります。
解決策をお探しですか?

PHP、継承

クラス -----解決策--------------------------------
両方の $name が public として宣言されている場合、当然のことながら、サブクラスは親クラスをオーバーライドします これで問題ないはずですよね? $name が private として宣言されている場合、メソッド fb は親クラスに属しているため、当然ながら親クラスの private プロパティにのみアクセスできます

fb メソッドを Eb にコピーし、$this->fb();
を __construct に追加します。 真実が明らかになります

-----解決策---------

これをオーバーロードと呼びます public サブクラスは親クラスから変数名を継承してオーバーロードするため、元の値 が上書きされます。 プライベートの場合、サブクラスは親クラスの変数を上書きできません。現時点では、親クラスの元の値のみを出力できます。




-----解決策---------
1. プライベート プロパティは上書きできません。 2. サブクラスが親クラスのプライベート プロパティを呼び出すと、当然、親クラスのプロパティが直接出力されます。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート