Класс, объект и инвариант
Класс описывает правила создания объектов; объект — конкретное состояние, прошедшее эти правила.
final class EmailAddressИнвариант
EmailAddress не должен существовать с заведомо неверным адресом. Проверка выполняется при создании, а наружу выходит готовый объект.
Пример
<?php
final readonly class EmailAddress {
public function __construct(public string $value) {
if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
throw new InvalidArgumentException('Некорректный email');
}
}
}Поведение
Метод уместен, если использует правила и состояние объекта. Простую независимую функцию не нужно помещать в класс только ради ООП.
Ошибка
Публичные изменяемые свойства позволяют обойти проверку конструктора. readonly помогает, но не заменяет валидацию вложенных объектов.
Задание
Создайте Money с целой суммой в минимальных единицах и запретом отрицательного значения.
Закрепите материал
Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.
Связанные материалы
Источники и проверка
- PHP Documentation Group — структурный источник, без внешней ссылки
Последняя содержательная проверка: . Автор-разработчик Михаил Каржин. Методика качества контента.