PHP入門:Attributes(属性)について -vol.2-

スポンサーリンク
PHP入門:Attributes(属性)について -vol.2- 用語解説
PHP入門:Attributes(属性)について -vol.2-
この記事は約3分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、PHPのAttributes(属性)についてご紹介します。

スポンサーリンク

背景

PHP8.2を利用したAPIを開発しているときにAttributes(属性)を利用したので、そのときの調査内容を備忘としてのこしました。

こちらのサイトを参考にしています。

構文

属性の構文にはいくつかのパートがあります。まず、属性の宣言は常に #[ から始まり、対応する終了部分 ] で閉じられます。内部には、カンマで区切られた一つまたは複数の属性がリストアップされます。属性の名前は、名前空間の基本的な使用法で説明されている非修飾、修飾、または完全修飾名です。属性への引数はオプションですが、通常の括弧 () で囲まれています。属性への引数は、リテラル値または定数式のみです。位置引数と名前付き引数の構文の両方が使用できます。

属性の名前とその引数は、属性のインスタンスがReflection APIを介してリクエストされるときに、クラスに解決され、引数はそのコンストラクタに渡されます。そのため、各属性ごとにクラスを導入する必要があります。

この説明は、PHP 8から導入された属性の構文と使用方法に関する基本的なルールを説明しています。属性は、コードにメタデータ情報を追加するための非常に強力なツールであり、クラスやメソッドに関する情報を追加できるようになります。また、属性はReflection APIを使用して実行時にその情報にアクセスするための手段を提供します。

構文のサンプル

<?php
// a.php
namespace MyExample;

use Attribute;

#[Attribute]
class MyAttribute
{
    const VALUE = 'value';

    private $value;

    public function __construct($value = null)
    {
        $this->value = $value;
    }
}

// b.php

namespace Another;

use MyExample\MyAttribute;

#[MyAttribute]
#[\MyExample\MyAttribute]
#[MyAttribute(1234)]
#[MyAttribute(value: 1234)]
#[MyAttribute(MyAttribute::VALUE)]
#[MyAttribute(array("key" => "value"))]
#[MyAttribute(100 + 200)]
class Thing
{
}

#[MyAttribute(1234), MyAttribute(5678)]
class AnotherThing
{
}

おわりに

今日は、PHPのAttributes(属性)についてご紹介しました。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました