Синтаксис атрибутов состоит из нескольких частей. Во-первых, объявление атрибута всегда имеет начало #[
и соответствующее окончание ]
. Внутри перечисляются один или несколько атрибутов, разделенных запятой. Имя атрибута является неполным, квалифицированным или полным именем. Аргументы атрибута необязательны, но заключаются в обычные круглые скобки ()
. Аргументами атрибутов могут быть только литеральные значения или константные выражения. Можно использовать как позиционный, так и именованный синтаксис аргументов.
Имена атрибутов и их аргументы разрешаются в класс, а аргументы передаются его конструктору, когда экземпляр атрибута запрашивается через 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
{
}
0 комментариев