Оголошення класів атрибутів

Хоча й немає суворої вимоги, краще виконувати рекомендацію — створювати клас для кожного атрибуту. У найпростішому випадку необхідно створити порожній клас із атрибутом #[Attribute]клас якого можна імпортувати з глобального простору імен через оператор use.

Приклад #1 Простий клас з атрибутом

Loading...

Щоб обмежити типи сутностей, на які можна націлити атрибут, необхідно в момент оголошення атрибута #[Attribute] передати як перший аргумент бітову маску.

Приклад #2 Специфікація вказівки цілей, яким атрибут може бути наданий

Loading...

Після такого декларування спроба присвоїти атрибут 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] з прапором Attribute::IS_REPEATABLE у бітовій масці.

Приклад #3 Застосування константи IS_REPEATABLE при оголошенні атрибуту для дозволу його багаторазового надання

Loading...