Danyloff

Атрибуты в PHP


  • ·

· ·

Атрибуты в PHP — это новая функциональность, добавленная в версию PHP 8.0, которая позволяет добавлять метаданные к классам, методам, свойствам и константам. Атрибуты могут использоваться для определения метаданных, таких как тип данных, ожидаемый формат исключения и т.д., и могут быть использованы для автоматической генерации кода, проверки типов и многих других задач.

Давайте рассмотрим пример использования атрибутов на классе Person

class Person {
    #[MaxLength(50)]
    public string $name;

    #[MaxValue(100)]
    public int $age;

    #[Format('Y-m-d')]
    public DateTime $birthDate;

    #[JsonSerializable]
    public function serialize() {
        // some code here
    }
}

В этом примере мы определяем класс Person. Класс содержит несколько публичных свойств, каждое из которых имеет связанный атрибут.

Например, свойство $name имеет атрибут #[MaxLength(50)], который указывает, что длина строки $name должна быть не более 50 символов.

Свойство $age имеет атрибут #[MaxValue(100)], который указывает, что $age не должно превышать 100.

Свойство $birthDate имеет атрибут #[Format(‘Y-m-d’)], который указывает, что $birthDate должен быть отформатирован в соответствии с форматом ‘Y-m-d’.

Метод serialize имеет атрибут #[JsonSerializable], который указывает, что метод должен быть сериализуемым в JSON.

Давайте теперь рассмотрим каждый атрибут более подробно

1. #[MaxLength($length)]

Этот атрибут позволяет определить максимальную длину для строкового свойства. В данном случае максимальная длина строки $name равна 50.

use Attribute;

#[Attribute(Attribute::TARGET_PROPERTY)]
class MaxLength {
    public function __construct(public int $max) {}
}

Атрибут #[MaxLength] объявляется как класс и получает значение максимальной длины в качестве параметра конструктора.

2. #[MaxValue($value)]

Этот атрибут определяет максимальное значение для числового свойства. В данном случае максимальное значение для свойства $age равно 100.

use Attribute;

#[Attribute(Attribute::TARGET_PROPERTY)]
class MaxValue {
    public function __construct(public int $max) {}
}

Аналогично, #[MaxValue] объявляется как класс и получает значение максимального числа в качестве параметра конструктора.

3. #[Format($format)]

Этот атрибут определяет формат для даты/времени. В данном случае формат для свойства $birthDate равен ‘Y-m-d’.

use Attribute;

#[Attribute(Attribute::TARGET_PROPERTY)]
class Format {
    public function __construct(public string $format) {}
}

Аналогично, #[Format] объявляется как класс и получает формат в качестве параметра конструктора.

4. #[JsonSerializable]

Этот атрибут указывает, что метод должен быть сериализуемым в формат JSON. Метод serialize в нашем примере помечен этим атрибутом.

use Attribute;

#[Attribute(Attribute::TARGET_METHOD)]
class JsonSerializable {}

#[JsonSerializable] объявляется как класс. Он используется только для методов и не имеет параметров.

Заключение

Использование атрибутов в PHP может значительно улучшить производительность вашего кода и сделать его более удобным для чтения и поддержки. Атрибуты позволяют определять метаданные для классов, методов, свойств и констант, которые могут быть использованы для автоматической генерации кода, проверки типов и многих других задач.


Так же интересно

Шаблон Strategy

Шаблон Strategy является одним из базовых шаблонов проектирования, который позволяет определить семейство алгоритмов, инкапсулировать их и взаимозаменять в...