第10章 オブジェクト指向構文 / 第4回 模擬試験
PHPの無名クラスに関する次の記述のうち、正しいものはどれか。
無名クラスは`new class { ... }`のように、クラス名を付けずにその場でインスタンス化できる。
正解
無名クラスは継承やインターフェイスの実装を行うことができない。
無名クラスは複数回インスタンス化して再利用することを主目的とした機能である。
無名クラスはPHP5から存在する機能である。
解説
無名クラスは`new class { ... }`のように、`class`キーワードの後にクラス名を書かずにその場で定義とインスタンス化を同時に行える構文です。一度しか使わないような小さなクラスを、わざわざ名前を付けて別途定義する手間を省けます。
他の選択肢が誤りである理由は次の通りです。
・無名クラスも通常のクラスと同様に、`new class extends Base implements Iface { ... }`のように継承やインターフェイスの実装を行えます。
・無名クラスはその場限りの使い捨てオブジェクトを想定した機能で、変数に代入して1回のインスタンス生成として使うのが基本です(クラス名がないため、複数箇所から`new`して再利用することは想定されていません)。
・無名クラスはPHP 7.0で導入された機能です。「PHP5から存在する」は誤りです。
例:
```
$logger = new class {
public function log(string $msg): void {
echo "[LOG] {$msg}";
}
};
$logger->log('テスト');
```
(参照: 独習PHP 第4版 第10章 オブジェクト指向構文 10.4.4節 無名クラス p.520〜522)