Хотя это и не является строго обязательным, рекомендуется создать фактический класс для каждого атрибута. В самом простом случае требуется только пустой класс с #[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_CLASSAttribute::TARGET_FUNCTIONAttribute::TARGET_METHODAttribute::TARGET_PROPERTYAttribute::TARGET_CLASS_CONSTANTAttribute::TARGET_PARAMETERAttribute::TARGET_ALL
По умолчанию атрибут может использоваться только один раз для каждого объявления. Если атрибут должен повторяться в объявлениях, он должен быть указан как часть битовой маски #[Attribute]объявления.
Пример #3 Использование IS_REPEATABLE для многократного разрешения атрибута в объявлении
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION | Attribute::IS_REPEATABLE)]
class MyAttribute
{
}
0 комментариев