第11章 高度なプログラミング / 第2回 模擬試験

PHP 8.0の属性(Attributes)に関する次の記述のうち、正しいものはどれか。

属性は`#[...]`という構文で記述する。 正解
属性はPHP 7.4以前から存在する機能である。
属性を使うと、実行時にコードの動作が必ず変化する。
属性はコメントの一種であり、リフレクションからは取得できない。
解説
PHP 8.0で導入された属性(Attributes)は、`#[AttributeName]`のように、シャープ記号と角括弧を組み合わせた構文で記述します。 他の選択肢が誤りである理由は次の通りです。 ・属性はPHP 8.0で新規に追加された構文で、PHP 7.4以前のバージョンでは使用できません。 ・属性はあくまでメタデータを付与する仕組みであり、それ自体が自動的にコードの動作を変えるわけではありません。属性を利用する側(フレームワークなど)が`ReflectionClass`等で属性を読み取り、その情報をもとに処理を行って初めて動作に影響します。 ・属性はコメントとは異なり、実行時にリフレクションAPI(`getAttributes()`など)を通じてプログラムから取得・活用できます。 例: ``` #[Route('/users', methods: ['GET'])] class UserController {} $reflection = new ReflectionClass(UserController::class); $attributes = $reflection->getAttributes(); ``` (参照: 独習PHP 第4版 第11章 高度なプログラミング 11.1節 属性 p.590〜598)