Сначала перечислите исходы
Тренировку можно опубликовать, если у неё есть владелец, хотя бы один подход и допустимая длительность. Вместо вложенных if начните с таблицы: условие, исход, код причины и сообщение для интерфейса. Это обнаруживает пропущенные комбинации до написания кода.
Boolean удобен для простого вопроса, но теряет объяснение. На границе use case полезнее вернуть успешный результат либо типизированную причину: missing_sets, invalid_duration, forbidden. HTTP-слой позже сопоставит её со статусом и текстом.
Последовательность решения
Строгое сравнение как базовый выбор
Позиция 0, строка '0', false и null часто означают разные вещи. Начинайте с === и ослабляйте сравнение только при сформулированной необходимости. Особенно внимательно проверяйте функции, которые возвращают число или false.
Оператор ?? отвечает только на отсутствие ключа или null. Тернарный оператор отвечает на истинность выражения. Подмена одного другим создаёт ошибки с нулевыми значениями, поэтому выбор оператора должен следовать модели данных.
Match для закрытого набора
<?php
declare(strict_types=1);
function intensityLabel(int $repetitions): string
{
return match (true) {
$repetitions < 1 => throw new InvalidArgumentException('Нужен хотя бы один повтор'),
$repetitions <= 5 => 'силовой диапазон',
$repetitions <= 12 => 'смешанный диапазон',
default => 'выносливость',
};
}
echo intensityLabel(8);Не смешивайте решение и эффект
Функция, которая одновременно вычисляет право, обновляет запись, отправляет письмо и печатает HTML, почти не тестируется. Сначала получите решение, затем use case выполнит разрешённые эффекты в известном порядке и зафиксирует событие.
Короткая guard clause уменьшает вложенность, но не должна превращаться в россыпь безымянных условий. Выносите повторяющееся правило в функцию с предметным именем: canPublish, ownsWorkout, durationIsAllowed.
Лабораторная работа
Составьте таблицу публикации тренировки минимум с шестью строками. Реализуйте guard clauses и тест для каждой причины отказа, включая пограничные значения длительности.
Закрепите материал
Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.
Перелинковка со справочником
Проверка актуальности
- php.nethttps://www.php.net/releases/8.5/en.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
Текст и схемы созданы для этого самоучителя без воспроизведения страниц, иллюстраций и листингов приложенной книги. Проверено: .