【PHP 8】属性(アトリビュート)の基礎知識と使い方をサンプルコードで解説
PHP 8の属性(アトリビュート)とは
属性(アトリビュート)は、クラス、関数、クラスメソッド、クラスプロパティ、定数、パラメータなどにメタデータを付加するための特殊なクラスです。属性は実行時に何らかの処理を行うわけではなく、コードの動作に直接影響を与えることもありません。その代わり、リフレクションAPIを通じて参照でき、PHP 8では他のコードからクラスのプロパティやメソッドを検査できるようになります。
属性の主な特徴
- 1つの宣言に対して複数の属性を指定できる
- クラス名を解決できる
- 名前空間(ネームスペース)に対応している
- 0個以上のパラメータを持つことができる
PHP 8における属性の構文ルール
- PHP 8では、属性の宣言に #[](シャープ記号+角括弧)を使用します。
- #[] の中に、カンマで区切って複数の属性をまとめて宣言できます。
- 引数は省略可能ですが、使う場合は丸括弧 () で囲む必要があります。
- 引数にはリテラル値または定数式を指定できます。
基本構文:
#[attribute]
各要素への属性の適用例
クラスへの適用:
#[Attribute]
final class EmpClass {
}
関数への適用:
#[Attr('param')]
function Exam() {}
クラスへの適用:
#[Attr('param')]
class Exam {}
クラスプロパティへの適用:
class Emp {
#[Attribute('param')]
public $name;
}
クラス定数への適用:
class Emp {
#[Attribute('emp')]
private const EMP = 'emp';
}
関数への適用:
#[Attribute('emp')]
function exam() {}
メソッド引数への適用:
function emp(#[Attribute('param')] $name) {
}
総合サンプル:関数・メソッド・パラメータ・定数での属性活用
以下の例では、クラス、定数、プロパティ、メソッド、無名クラス、関数、クロージャ、アロー関数といったさまざまな要素に同じ属性 MyAttribute を付加しています。
<?php
#[MyAttribute]
class Emp
{
#[MyAttribute]
public const EMP = 'emp';
#[MyAttribute]
public $a;
#[MyAttribute]
public function foo(#[MyAttribute] $dept){}
}
$object = new #[MyAttribute] class(){};
#[MyAttribute]
function f() {}
$f1 = #[MyAttribute] function(){};
$f2 = #[MyAttribute] fn() => 1;
print_r($f1);
?>
出力結果
Closure Object ( )
このようにPHP 8の属性を使えば、コードの動作を変えることなく宣言的にメタ情報を付与できます。リフレクションAPIと組み合わせることで、バリデーションやルーティング設定、依存性注入など、フレームワーク開発においても非常に強力な仕組みとなります。
-
HTMLのdata-*属性とは?カスタムデータ属性の基本と使い方を実例付きで解説
HTMLのdata-*属性は、あらゆるHTML要素に独自のカスタムデータを埋め込むために使用されるグローバル属性です。グローバル属性であるため、どの要素に対しても自由に利用できます。 JavaScriptと連携して要素に関連付ける情報を持たせたい場合などに非常に便利で、モダンなWeb開発では広く活用されています。 data-*属性の書き方(構文) 基本的な構文は以下の通りです。 <element data-属性名=値> ここで注意すべきポイントは次の2つです。 属性名には小文字のみを使用する(大文字は使用不可) 接頭辞「data-」の後に、少なくとも1文字以上の文字が必要 da
-
HTML属性とは?基本構文からol・textareaの実用例までわかりやすく解説
HTML属性(attribute)は、画像やキャンバスの幅・高さのように、要素に対してプロパティを設定するために使用されます。すべての要素は属性を持つことができ、要素に関する追加情報をブラウザに伝える役割を果たします。属性は「名前」と「値」のペアで構成されます。以下はその基本的な例です。<canvas id="newCanvas" width="400" height="300">その他の属性の例も見てみましょう。<img alt="代替テキスト">HTML5の標準仕様では、属性値を引用符で