<?php class VisibilityCheck{ protected $protectedProperty = "protectedは継承先でも読めます。"; } // VisibilityCheckを継承 class VisibilityCheckProtected extends VisibilityCheck{ public function checkProtected(){ // 継承元のprotectedが使用可能。 print $this->protectedProperty; } } $vc = new VisibilityCheckProtected(); // インスタンス生成 $vc->checkProtected(); // publicなら、外部から呼び出せる。
出力結果
protectedは継承先でも読めます。
よく、クラス継承すると、public protectedのメンバが
サブクラスに受け継がれるという風に解釈している技術サイトが非常におおいです。
public protectedの本当の意味って
サブクラスからでもスーパークラスのメンバをコールできるというだけでオーバーライドしない限り、そのメンバはあくまでスーパークラスのものという解釈をしているのですが、サイト主さんは
どのようなお考えですか?
>通りすがり。さん
コメントをありがとうございます。
返信が遅くなってしまい、申し訳ございません。
継承についてですが、プロパティ(メンバ変数)は
インスタンス生成したときにスーパークラスのpublicやprotectedなプロパティも用意されるので、
感覚的には「受け継がれる」という表現で良いように感じます。
メソッド(メンバ関数)については、ご指摘の通りスーパークラスのメソッドも参照できる、
という感じが強いですね。
このサイトの目的は、そもそも「読み方」を調べられる、というだけのものです。
それだけでは寂しいので、申し訳程度に解説も載せている…というスタンスです。
本気で調べたい方には充分ではない内容になってしまい、申し訳ございません。
誤りについてはご指摘をいただければ修正しますので、今後ともよろしくお願いします。