УрокПроверено 2026Локальный прогресс

Класс, объект и инвариант

Класс описывает правила создания объектов; объект — конкретное состояние, прошедшее эти правила.

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 — структурный источник, без внешней ссылки

Последняя содержательная проверка: . Автор-разработчик Михаил Каржин. Методика качества контента.

Данные этого сервиса

Настройки cookie и локальных данных

Аналитика

Текущий статус: не выбран. До согласия обе аналитические системы не загружаются.

Локальные данные

Удаление затрагивает только ключи PHP-сервиса в этом браузере и требует подтверждения.

Политики

Политика конфиденциальности · Политика использования файлов cookie