PHP の継承に関する小さな疑問

WBOY
リリース: 2016-06-13 13:01:11
オリジナル
762 人が閲覧しました

PHP の継承に関する小さな問題
次のように、継承関係をテストするコードをいくつか書きました。



クラスA
{
パブリック $pub_A;

プライベート $pri_A; パブリック関数 pub()
{
$this->pub_A = 'Aの公開です!';
echo "

".$this->pub_A."

";
}
保護された関数 pri()
{
$this->pri_A = 'A のプライベートです!';
echo "

".$this->pri_A."

";
}
}

クラス B は A
を拡張します {
パブリック $pub_B;
プライベート $pri_B;
関数 __construct()
{
echo "

".$this->pri()."

";

$this->pri_A = 10;
echo "

".$this->pri_A."

"; }
}
$b = 新しい B;

?>


重要な点を強調しました。親クラス A では、$pri_A はプライベートであり、サブクラス B に継承されるべきではありません。しかし、なぜ pri_A に値を代入し、割り当てられた番号を以下に表示できるのでしょうか? - --解決策------------------

private: メソッドまたはプロパティはクラスのメンバーからのみアクセスでき、継承することはできませんクラスのメンバーからのアクセスから。 プライベート ノートでマークされたメソッドまたはプロパティは、継承されたクラスで再定義できます。

各クラスは、定義された独自のプライベート メソッドのみを参照できます。

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

サブクラスは、親クラスのパブリック メソッドを使用して、親クラスのプロパティにアクセスします -----解決策---------

コードをテストしてみたところ、Aに$pri_A="aaa"を与えると、Bに値を代入しないと値を取得できません。Bに値を代入すると、代入された値が取得できることがわかります。サブクラスでは、値を親クラスに割り当てることができます。プライベート プロパティは再定義されます。
------解決策---------

引用

親クラス A では、$pri_A はプライベートであり、サブクラス B に継承されるべきではありません。しかし、なぜ pri_A に値を割り当て、割り当てられた番号を以下に表示できるのでしょうか?
問題は、サブクラスが親クラスのプライベート メンバーにアクセスすることではありません

代わりに、サブクラスは $this->pri() メソッドを呼び出します

このメソッドは親クラス
から継承されます。
ただし、親クラスのこのメソッドは、親クラスのプライベート メンバーを呼び出します

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

はい、私有財産は継承されません。 でご覧いただけます 関数 __construct()
{
echo "

".$this->pri()."

";

echo isset($this->pri_A) ? 'yes' : 'no';//これは no を出力します

$this->pri_A = 10; echo "

".$this->pri_A."

";
}

pri() メソッドは親クラスに属しているため、そのプライベート プロパティに自然にアクセスできます

$this->pri_A = 10; とすると、pri_A という名前のパブリック プロパティがオブジェクト $b
に作成されます こんな感じで見ることができます
print_r($b);
出力:
B オブジェクト
(
[pub_B] =>
[pri_B:private] =>
[pub_A] =>
[pri_A:private] => A のプライベートです!
[pri_A] => 10
)


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