Загрузка...

#Атрибуты в php

Обогащение своего php кода с помощью атрибутов

Начиная с 8й версии языка, в php стали доступны атрибуты. Есть достаточно много статей на эту тему, но все равно, понять что это и зачем, достаточно сложно. Постараюсь описать эту возможность языка максимально просто.

Определение

Атрибуты — это возможность языка, которая позволяет добавлять используемые метаданные к сущностям языка (классам, функциям, свойствам и т.д.)

Под метаданными подразумеваются какие-то доп. свойства и поведение (что может или не может делать сущность языка).

Что бы использовать эти метаданные (в полном аспекте), в коде должен быть создан объект рефлексии new ReflectionObject($params);, который прочитает эти параметры, что бы дальнейший код мог их использовать.

Т.к. это языковая возможность, то работают атрибуты быстро и не требуют доп. затрат на из обработку.

PHP проверяет валидность атрибутов только при вызове ReflectionAttribute::newInstance(). А если не обращаться к атрибутам через Reflection, то они полностью игнорируются, чтобы не загружать лишние классы и не создавать объекты.

Практическое применение

Понятно, что применений можно придумать много. Рассмотрим самый простой пример.

arrayshape

Тут мы видим атрибут #ArraySharpe который говорит нам, о том, что функция user() вернет нам не просто какой-то массив. (О том что это массив нам говорит array в типе возвращаемого аргумента.)
А массив, который должен содержать определенные ключи, которые должны соответствовать определенным типам.

Что это дает?

Это позволяет сделать код более читаемым и управляемым. Хотя визуально это выглядит более громоздко.

Что из себя представляют атрибуты

Это по сути классы, объявленные специальным образом. Можно использовать уже определенные классы, их описания и названия можно найти в документации языка. Можно создать собственные.

Пример создания и использования собственного атрибута:

Более подробную информацию можно прочитать в этой статье.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *