Начиная с 8й версии языка, в php стали доступны атрибуты. Есть достаточно много статей на эту тему, но все равно, понять что это и зачем, достаточно сложно. Постараюсь описать эту возможность языка максимально просто.
Определение
Атрибуты – это возможность языка, которая позволяет добавлять используемые метаданные к сущностям языка (классам, функциям, свойствам и т.д.)
Под метаданными подразумеваются какие-то доп. свойства и поведение (что может или не может делать сущность языка).
Что бы использовать эти метаданные (в полном аспекте), в коде должен быть создан объект рефлексии new ReflectionObject($params);
, который прочитает эти параметры, что бы дальнейший код мог их использовать.
Т.к. это языковая возможность, то работают атрибуты быстро и не требуют доп. затрат на из обработку.
PHP проверяет валидность атрибутов только при вызове ReflectionAttribute::newInstance()
. А если не обращаться к атрибутам через Reflection, то они полностью игнорируются, чтобы не загружать лишние классы и не создавать объекты.
Практическое применение
Понятно, что применений можно придумать много. Рассмотрим самый простой пример.
Тут мы видим атрибут #ArraySharpe который говорит нам, о том, что функция user()
вернет нам не просто какой-то массив. (О том что это массив нам говорит array в типе возвращаемого аргумента.)
А массив, который должен содержать определенные ключи, которые должны соответствовать определенным типам.
Что это дает?
Это позволяет сделать код более читаемым и управляемым. Хотя визуально это выглядит более громоздко.
Что из себя представляют атрибуты
Это по сути классы, объявленные специальным образом. Можно использовать уже определенные классы, их описания и названия можно найти в документации языка. Можно создать собственные.
Пример создания и использования собственного атрибута:
Более подробную информацию можно прочитать в этой статье.