第10章 オブジェクト指向構文 / 第1回 模擬試験
PHPのカプセル化に関する次の記述のうち、誤っているものはどれか。
カプセル化は、クラスの内部実装を隠蔽し、外部からのアクセスを制限する。
`public`は、どこからでもアクセス可能であることを示す。
`protected`は、そのクラス自身と子クラスからのみアクセス可能であることを示す。
`private`は、そのクラス自身と子クラスからアクセス可能であることを示す。
正解
解説
`private`は、そのプロパティ・メソッドを定義したクラス自身の内部からのみアクセスできる修飾子です。子クラス(サブクラス)からもアクセスできないため、「自身と子クラスからアクセス可能」という記述は誤りです(子クラスからもアクセスできるのは`protected`です)。
他の選択肢が正しい理由は次の通りです。
・カプセル化は、オブジェクトの内部データや実装の詳細を隠蔽し、外部には必要なインターフェースだけを公開する設計原則です。
・`public`はクラスの外部を含めどこからでもアクセスできます。
・`protected`は、定義したクラス自身と、それを継承した子クラスからアクセスできます。
例:
```
class Base {
private $secret = 'a';
protected $shared = 'b';
}
class Child extends Base {
public function show() {
// echo $this->secret; // Error: privateは子クラスから見えない
echo $this->shared; // OK: protectedは子クラスから見える
}
}
```
(参照: 独習PHP 第4版 第10章 オブジェクト指向構文 10.2節 カプセル化 p.489〜495)