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