Хотя это и не является строго обязательным, рекомендуется создать фактический класс для каждого атрибута. В самом простом случае требуется только пустой класс с #[Attribute]
объявленным атрибутом, который можно импортировать из глобального пространства имен с помощью инструкции использования.
Пример #1 Простой класс атрибутов
<?php
namespace Example;
use Attribute;
#[Attribute]
class MyAttribute
{
}
Чтобы ограничить тип объявления, которому может быть назначен атрибут, битовую маску можно передать в качестве первого аргумента #[Attribute]
объявления.
Пример #2 Использование целевой спецификации для ограничения того, где можно использовать атрибуты
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION)]
class MyAttribute
{
}
Объявление MyAttribute для другого типа теперь вызовет исключение во время вызова ReflectionAttribute::newInstance() .
Можно указать следующие цели:
Attribute::TARGET_CLASS
Attribute::TARGET_FUNCTION
Attribute::TARGET_METHOD
Attribute::TARGET_PROPERTY
Attribute::TARGET_CLASS_CONSTANT
Attribute::TARGET_PARAMETER
Attribute::TARGET_ALL
По умолчанию атрибут может использоваться только один раз для каждого объявления. Если атрибут должен повторяться в объявлениях, он должен быть указан как часть битовой маски #[Attribute]
объявления.
Пример #3 Использование IS_REPEATABLE для многократного разрешения атрибута в объявлении
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION | Attribute::IS_REPEATABLE)]
class MyAttribute
{
}
0 комментариев