Синтаксис атрибутов состоит из нескольких частей. Во-первых, декларация
атрибута начинается с символов #[
и заканчивается
символом ]
. Во-вторых, внутри конструкции перечисляют
один или больше атрибутов, которые разделяют запятой.
Названия атрибутов по аналогии с названиями классов указывают неполными,
полными и абсолютными, как описывает раздел
«Основы пространств имён».
Аргументы атрибутов необязательны, но если аргументы указали,
их заключают в круглые скобки ()
. Атрибуты принимают аргументы
либо в виде конкретных литеральных значений, либо константных выражений.
Аргументы разрешается записывать как позиционным, так и именованным синтаксисом.
Когда API-интерфейс модуля Reflection запрашивает экземпляр класса атрибута, название атрибута трактуется как название запрашиваемого класса, а аргументы атрибута передаются в конструктор этого класса. Поэтому для каждого атрибута необходимо создавать класс.
Пример #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 {}
?>