Declaring Attribute Classes
Оновлено: 11.05.2023
Хоча це і не є обов'язковою вимогою, але рекомендується створювати власне клас для кожного атрибута. У найпростішому випадку потрібен лише порожній клас з оголошеним атрибутом #[Attribute], який можна імпортувати з глобального простору імен за допомогою інструкції use.
Приклад #1 Простий клас атрибутів
<?php
namespace Example;
use Attribute;
#[Attribute]
class MyAttribute
{
}
Щоб обмежити тип оголошення, якому можна призначити атрибут, бітову маску можна передати як перший аргумент до оголошення #[Атрибут].
Приклад #2 Використання цільової специфікації для обмеження використання атрибутів
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION)]
class MyAttribute
{
}
Оголошення MyAttribute на іншому типі тепер буде генерувати виключення під час виклику ReflectionAttribute::newInstance()
Можна вказати наступні цілі:
- Атрибут::TARGET_CLASS
- Атрибут::TARGET_FUNCTION
- Атрибут::TARGET_METHOD
- Атрибут::TARGET_PROPERTY
- Атрибут::TARGET_CLASS_CONSTANT
- Атрибут::TARGET_PARAMETER
- Атрибут::TARGET_ALL
За замовчуванням атрибут може бути використаний лише один раз в одній декларації. Якщо атрибут має повторюватися у деклараціях, його слід вказати як частину бітової маски до декларації #[Атрибут].
Приклад #3 Використання IS_REPEATABLE, щоб дозволити атрибут у декларації кілька разів
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION | Attribute::IS_REPEATABLE)]
class MyAttribute
{
}