第11章 高度なプログラミング / 第1回 模擬試験
PHP 8.0で導入された属性(Attributes)に関する次の記述のうち、誤っているものはどれか。
属性は、クラス、メソッド、プロパティなどにメタデータを付与する機能である。
属性は、`#[...]`の形式で記述される。
属性は、実行時にリフレクションAPIを通じて取得できる。
属性は、PHP 7.x以前のバージョンでも利用できる。
正解
解説
属性(Attributes)はPHP 8.0で新たに導入された構文であり、`#[...]`という記法自体がPHP 8.0以降でしか解釈されません。PHP 7.x以前でこの記法を使うと構文エラーになります(PHP 7系では代わりにdocコメント内の`@Annotation`のような疑似アノテーションが使われていました)。
他の選択肢が正しい理由は次の通りです。
・属性は、クラス・メソッド・プロパティ・関数の引数などに構造化されたメタデータを付与する機能です。
・属性は`#[AttributeName(引数)]`という角括弧2つの構文で記述します。
・付与した属性は`ReflectionClass`などのリフレクションAPIの`getAttributes()`を通じて実行時に取得・利用できます。
例:
```
#[Route('/users', methods: ['GET'])]
class UserController {}
```
(参照: 独習PHP 第4版 第11章 高度なプログラミング 11.1節 属性 p.590〜598)