Самоучитель: динамические веб-приложения
Глава 3 из 18II. Язык приложения90 минут

Глава 3. Значения, типы и управляемый поток PHP

Типы помогают не тогда, когда украшают сигнатуру, а когда фиксируют допустимые состояния и не пропускают сырой ввод в предметную логику.

После главы вы сможете
  • отделить ввод от модели
  • писать прозрачные ветви
  • проектировать функции как контракты

Два мира одного значения

Строка '42' из формы и целое число 42 могут выглядеть одинаково, но допускают разные операции. На границе приложения сырое представление проверяется и преобразуется; внутри сценария код работает с уже установленным типом. Это уменьшает число мест, где приходится помнить о пустой строке, локали и нестрогом сравнении.

declare(strict_types=1) влияет на скалярные вызовы из текущего файла, но не превращает PHP в язык без динамики. Массив по-прежнему способен содержать разные значения, а JSON и HTTP приходят без ваших предметных гарантий.

Конвейер входа

Преобразование внешнего значенияСырое значение не попадает в предметную операцию до проверки формы и диапазона.ПолучитьstringПроверитьформаПреобразоватьтипПрименитьправило
Сырое значение не попадает в предметную операцию до проверки формы и диапазона.

Строгое сравнение по смыслу

Используйте === как исходный выбор и переходите к другому сравнению только с ясной причиной. Особенно важно различать false, 0, пустую строку и null: многие функции используют false как отказ, а ноль является допустимой позицией или количеством.

Не заменяйте предметное условие общей проверкой empty(). Она объединяет несколько разных состояний и стирает причину отказа. Лучше назвать каждую ветвь: отсутствует, неверный формат, выходит за диапазон, запрещено правилом.

Функция как обещание

<?php
declare(strict_types=1);

function shippingCost(int $weightGrams, bool $express): int
{
    if ($weightGrams <= 0) {
        throw new InvalidArgumentException('Вес должен быть положительным');
    }

    $base = $weightGrams <= 1000 ? 350 : 550;
    return $express ? $base + 400 : $base;
}

Массивы и допустимые состояния

Массив PHP удобен на границе: он естественно представляет JSON, строку результата PDO или набор формы. Но внутри сложной модели массив не сообщает, какие ключи обязательны и какие сочетания разрешены. Когда число неявных условий растёт, создайте небольшой value object или DTO с конструктором, который не допускает половинчатого состояния.

match полезен для закрытого набора вариантов, потому что сравнивает строго и требует обработать значение либо через default, либо через все ветви. Не используйте default бездумно: новый статус иногда должен сломать тест, а не попасть в старое поведение.

Ошибки как часть потока

Предсказуемый отказ пользователя оформляйте предметным результатом или исключением на границе сценария. Неожиданную техническую ошибку журналируйте с correlation id и превращайте в нейтральный HTTP-ответ. Оператор @ и пустой catch не исправляют проблему — они удаляют наблюдаемость.

finally подходит для освобождения ресурса, но не для сокрытия результата. Если код открыл транзакцию, путь успеха делает commit, путь исключения — rollback, после чего исходная ошибка продолжает движение.

Практика главы

Напишите функцию разбора количества товара из строки. Разведите отсутствие поля, нецелый формат, ноль и превышение остатка. Затем передайте в расчёт только int.

Локальный прогресс

Закрепите материал

Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.

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

Проверка актуальности

  • php.nethttps://www.php.net/manual/en/migration85.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.

Текст и схемы созданы для этого самоучителя без воспроизведения страниц, иллюстраций и листингов приложенной книги. Проверено: .

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

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

Аналитика

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

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

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

Политики

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