読者です 読者をやめる 読者になる 読者になる

‥‥、え〜と、protectedで宣言したメソッドって「自分と自分を継承したクラスからアクセスできる」、ってのは知っています。
で、私の認識としては「同じクラスから作成されたインスタンス(オブジェクト)間でも、別のインスタンスのprotectedフィールドにはアクセスできない」、とばかり思っていたのですが‥‥‥‥、


なんでアクセスできるんですか orz



インターフェイスに定義されているpublicなgetXxxxと、protectedでテンプレートメソッドから呼ばれるmakeXxxxがあって、引数で渡された自分と同じインターフェイスを実装したオブジェクトのmakeXxxxメソッドを(メソッド名を勘違いして)呼び出したら、エラーもnoticeも吐かずに普通に呼び出して値取得するから間違いに全然気がつかなかった。
大体、インターフェイスには(当たり前だけど)protectedメソッドなんかないのに、ナニを根拠に実装されている確証がないprotectedなフィールドにアクセスしてんですかと。

PHPの型のフリーダムさには馴れたと思ったけど、事実上スコープが機能していないんじゃなイカというこの解釈にはまいったわ。
#完全に別クラスのインスタンス間では、protectedのフィールドにアクセスすればちゃんとエラーを吐くんですが。