ホームページ >バックエンド開発 >PHPチュートリアル >わかりにくいPHPの継承問題!

わかりにくいPHPの継承問題!

WBOY
WBOYオリジナル
2016-06-23 14:02:08776ブラウズ

クラス B
{
public $name="aaa"; function fb()
echo get_class($this),"
"
echo $this->name,""; ; 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. サブクラスが親クラスのプライベート属性を呼び出すと、もちろん親クラスのものが直接出力されます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。