Атрибуты в 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 может значительно улучшить производительность вашего кода и сделать его более удобным для чтения и поддержки. Атрибуты позволяют определять метаданные для классов, методов, свойств и констант, которые могут быть использованы для автоматической генерации кода, проверки типов и многих других задач.