【PHP8.x】TARGET_PARAMETER定数の使い方

TARGET_PARAMETER定数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

TARGET_PARAMETER定数は、アトリビュートがメソッドまたは関数のパラメータに対してのみ使用可能であることを示す定数です。PHP 8で導入されたアトリビュート機能は、クラスやメソッドなどのコード要素に、構造化されたメタデータを追加するための仕組みです。アトリビュートを自作する際には、そのアトリビュートクラス自身の宣言の前に #[Attribute] を付加し、その引数で使用可能なターゲットを指定します。TARGET_PARAMETERは、このターゲットを指定するためのフラグの一つとして利用されます。例えば、#[Attribute(Attribute::TARGET_PARAMETER)] と指定して定義されたアトリビュートは、function sample(#[MyAttribute] int $id) {} のように、関数のパラメータ $id に対してのみ付加できます。もしクラスやメソッドの宣言にこのアトリビュートを付加しようとするとエラーとなり、設計者の意図しない利用を防ぐことができます。ビット単位の論理和演算子 | を使用すれば、Attribute::TARGET_METHOD | Attribute::TARGET_PARAMETER のように複数のターゲットを同時に許可することも可能です。

構文(syntax)

1<?php
2#[\Attribute(\Attribute::TARGET_PARAMETER)]
3class MyParameterAttribute
4{
5}

引数(parameters)

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

PHP Attribute TARGET_PARAMETERで属性を付与する

1<?php
2
3use Attribute;
4
5#[Attribute(Attribute::TARGET_PARAMETER)]
6class MyAttribute
7{
8    public function __construct(public string $message) {}
9}
10
11function myFunction(#[MyAttribute("This is a parameter attribute")] string $param)
12{
13    // 関数の処理
14    echo $param . PHP_EOL;
15}
16
17myFunction("Hello");

Attribute::TARGET_PARAMETER は、PHP 8 で導入された Attribute 機能で使用される定数の一つです。この定数は、Attribute を関数のパラメータに適用することを指定します。

上記のサンプルコードでは、まず use Attribute; で Attribute クラスをインポートしています。そして、#[Attribute(Attribute::TARGET_PARAMETER)] という記述で、MyAttribute クラスが Attribute であり、適用対象が関数のパラメータであることを宣言しています。

MyAttribute クラスは、コンストラクタで string 型の $message を受け取ります。これは、Attribute を適用する際に指定するメッセージです。

次に、myFunction 関数が定義されています。この関数の $param パラメータには、#[MyAttribute("This is a parameter attribute")] という Attribute が適用されています。これにより、MyAttribute$param パラメータに対して作用します。この例では、MyAttribute は単純にパラメータに関連付けられているだけですが、より複雑な処理を行う Attribute を定義することも可能です。

myFunction("Hello"); のように関数を呼び出すと、echo $param . PHP_EOL; の部分で、引数として渡された "Hello" が出力されます。Attribute は、パラメータの値自体を変更するものではなく、パラメータに関するメタデータを付与したり、特別な処理を施したりするために使用されます。Attribute::TARGET_PARAMETER を使用することで、関数のパラメータに対して柔軟な拡張や検証を行うことができます。

Attribute::TARGET_PARAMETER は、Attribute をパラメータに対してのみ使用できるように制限するものです。このサンプルコードでは、MyAttribute が関数 myFunction の引数 $param に適用されています。

初心者が注意すべき点として、Attribute は PHP 8 以降で使用可能であること、use Attribute; で Attribute クラスをインポートする必要があることが挙げられます。また、Attribute を適用する際には #[ ] の構文を使用します。

Attribute::TARGET_PARAMETER を指定することで、この Attribute をクラスやメソッドなどに誤って適用することを防ぎ、コードの意図を明確にできます。この Attribute は、パラメータに対して特定のメタデータを付与し、関数の処理をカスタマイズする場合などに役立ちます。

【PHP8.x】TARGET_PARAMETER定数の使い方 | いっしー@Webエンジニア