Attribute syntax

Оновлено: 09.05.2023

Синтаксис атрибутів складається з декількох частин. По-перше, оголошення атрибута завжди починається з початкового #[ і відповідного закінчення ]. Усередині перераховується один або декілька атрибутів, розділених комою. Ім'я атрибута - це некваліфіковане, кваліфіковане або повністю кваліфіковане ім'я, як описано у розділі Основи роботи з просторами імен. Аргументи до атрибута не є обов'язковими, але беруться у звичайні круглі дужки (). Аргументами атрибутів можуть бути лише буквені значення або константні вирази. Можна використовувати як позиційний, так і іменований синтаксис аргументів.

Імена атрибутів та їхні аргументи розпізнаються класом, а аргументи передаються його конструктору, коли екземпляр атрибута запитується через Reflection API. Таким чином, клас повинен бути введений для кожного атрибуту.

Приклад #1 Синтаксис атрибутів

<?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
{
}