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

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

独自の属性を定義するには、`#[Attribute]`を付与したクラスを定義する。 正解
属性は関数やメソッドの引数としてのみ使用でき、クラスには付与できない。
独自の属性はPHPの構文上、定義することができない。
属性を自作するには、必ずデータベースへの接続が必要である。
解説
独自の属性(カスタム属性)を定義するには、その属性を表すクラス自体に、PHP組み込みの`#[Attribute]`という属性を付与します。これにより、そのクラスを他のクラス・メソッドなどに対して`#[MyAttribute]`のように使えるようになります。 他の選択肢が誤りである理由は次の通りです。 ・属性はメソッドの引数だけでなく、クラス・プロパティ・メソッド・関数など様々な要素に付与できます。「引数としてのみ使用でき、クラスには付与できない」は誤りです。 ・PHP 8.0以降、独自の属性クラスを`#[Attribute]`付きで自由に定義できます。「構文上、定義することができない」は誤りです。 ・属性の定義・使用はPHPの言語機能であり、データベースへの接続は必要ありません。 例: ``` #[Attribute] class Route { public function __construct(public string $path) {} } #[Route('/users')] class UserController {} ``` (参照: 独習PHP 第4版 第11章 高度なプログラミング 11.1.2節 属性の自作 p.592〜595)