第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)