第10章 オブジェクト指向構文 / 第3回 模擬試験
PHPのインターフェイスに関する次の記述のうち、誤っているものはどれか。
インターフェイスは`interface`キーワードで定義する。
クラスは`implements`キーワードでインターフェイスを実装する。
インターフェイスで定義したメソッドは、実装クラスで必ず実装しなければならない。
インターフェイスは、通常のプロパティ(メンバー変数)の実体を持つことができる。
正解
解説
インターフェイスは、実体を持つ通常のプロパティ(メンバー変数)を定義することができません。インターフェイスで定義できるのはメソッドのシグネチャ(実装を持たない)と、値を持つ定数(`const`)のみです。「プロパティの実体を持てる」という記述は誤りです。
他の選択肢が正しい理由は次の通りです。
・インターフェイスは`interface インターフェイス名 { ... }`という構文で定義します。
・クラスは`class クラス名 implements インターフェイス名 { ... }`のように`implements`キーワードでインターフェイスを実装します。
・インターフェイスで宣言されたメソッドは、それを実装するクラス側で必ず実装しなければなりません。実装し忘れるとエラーになります。
例:
```
interface Shape {
const UNIT = 'cm'; // 定数はOK
public function area(): float; // メソッドのシグネチャのみ
// public $color; // NG: 実体を持つプロパティは定義できない
}
```
(参照: 独習PHP 第4版 第10章 オブジェクト指向構文 10.4.2節 インターフェイス p.516〜518)