Вложенные условия — это когда одна условная конструкция `if` находится внутри другой. Это позволяет создавать более сложную и точечную логику. Представьте себе систему доступа: сначала мы проверяем, есть ли у человека ключ-карта (первое, внешнее условие). Если есть, мы проверяем, соответствует ли его уровень доступа нужной зоне (второе, вложенное условие). Только если оба условия последовательно выполняются, доступ разрешается. Этот подход позволяет отсекать ненужные проверки и делать код более структурированным. В этом уроке мы научимся правильно создавать вложенные условия, исправлять типичные ошибки, связанные с ними (например, с фигурными скобками), и собирать из частей сложные логические проверки для реальных сценариев.
- Модуль 1: Основы синтаксиса PHP
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Модуль 4: Условные конструкции
- Модуль 5: Циклы
- Модуль 6: Массивы
- Индексированные массивы.
- Ассоциативные массивы.
- Многомерные массивы.
- Добавление элементов в массив.
- Удаление элементов из массива.
- Функция count().
- Функция array_push() и array_pop().
- Функция array_shift() и array_unshift().
- Функция array_merge().
- Функция array_slice().
- Функция array_splice().
- Функция in_array().
- Функция array_search().
- Функция array_keys() и array_values().
- Функция array_unique().
- Функция array_reverse().
- Сортировка: sort(), rsort().
- Сортировка: asort(), arsort().
- Сортировка: ksort(), krsort().
- Функция array_map().
- Функция array_filter().
- Функция array_reduce().
- Функция array_walk().
- Функция array_column().
- Деструктуризация массивов.
- Iterator интерфейс
- Модуль 7: Функции
- Объявление функций.
- Вызов функций.
- Параметры функций.
- Возврат значений return.
- Значения параметров по умолчанию.
- Передача по значению.
- Передача по ссылке.
- Переменное количество аргументов.
- Оператор распаковки ....
- Типизация параметров.
- Типизация возвращаемых значений.
- Nullable типы.
- Union типы (PHP 8).
- Именованные аргументы (PHP 8).
- Анонимные функции.
- Стрелочные функции.
- Замыкания и use.
- Рекурсивные функции.
- Глобальные переменные в функциях.
- Статические переменные в функциях.
- IteratorAggregate интерфейс
- Модуль 8: Работа со строками
- Одинарные и двойные кавычки.
- Экранирование символов.
- Heredoc и Nowdoc синтаксис.
- Функция strlen().
- Функция substr().
- Функция str_replace().
- Функция strpos() и strrpos().
- Функция explode() и implode().
- Функция trim(), ltrim(), rtrim().
- Функция strtolower() и strtoupper().
- Функция ucfirst() и ucwords().
- Функция str_repeat().
- Функция htmlspecialchars().
- Модуль 9: Суперглобальные переменные
- Модуль 10: Работа с формами
- Модуль 11: Работа с файлами
- Модуль 12: Дата и время
- Модуль 13: Регулярные выражения
- Модуль 14: Сессии и Cookie
- Модуль 15: Include и Require
- Модуль 16: Объектно-ориентированное программирование
- Модуль 17: Пространства имен
- Модуль 18: Обработка ошибок и исключений
- Модуль 19: Работа с JSON и XML
- Модуль 21: PDO - PHP Data Objects
- Модуль 22: Composer и зависимости
- Модуль 23: cURL и HTTP запросы
- Модуль 24: REST API
- Модуль 25: Безопасность
- Модуль 28: Работа с изображениями
- Модуль 29: Отправка email
- Модуль 30: Паттерны проектирования
- Модуль 31: Тестирование
- Модуль 32: Продвинутые возможности PHP 8+
1. Простое вложенное условие
В коде уже есть проверка, авторизован ли пользователь. Добавьте вложенное условие, которое внутри первой проверки будет определять, является ли роль пользователя 'admin'. Заполните пропуски, чтобы завершить код.
$is_logged_in = true;
$role = "admin";
if ($is_logged_in == true) {
echo "Пользователь авторизован. ";
input1S (input2S == "admin") {
echo "Добро пожаловать, Администратор!";
}
}2. Что выведет этот код?
Проследите за логикой выполнения этого кода. Сначала проверяется возраст пользователя, а затем, если он совершеннолетний, проверяется наличие у него водительских прав. Выберите, какой текст в итоге будет выведен на экран.
$age = 25;
$has_license = false;
if ($age >= 18) {
if ($has_license == true) {
echo "Можно водить машину.";
} else {
echo "Совершеннолетний, но нет прав.";
}
} else {
echo "Водить машину нельзя.";
}3. Ошибка в сравнении
В этом коде допущена одна из самых частых ошибок новичков: вместо оператора сравнения `==` используется оператор присваивания `=`. Это не вызывает синтаксической ошибки, но приводит к неверной логике работы. Найдите строку с ошибкой и исправьте её.
<?php$user_role = "editor";$document_status = "published"; if ($user_role == "editor") { if ($document_status = "new") { echo "Можно редактировать новый документ."; } else { echo "Можно комментировать опубликованный документ."; }}4. Заполните пропуски в структуре
Код проверяет, доступен ли товар. Если да, то он проверяет, подходит ли цена для специального предложения. Заполните пропуски, перетащив ключевые слова из банка, чтобы создать правильную вложенную `if-else` структуру.
$is_available = true;
$price = 120;
input1S ($is_available) {
echo "Товар в наличии. ";
input2S ($price < 100) {
echo "Специальное предложение!";
} input3S {
echo "Стандартная цена.";
}
}5. Предскажите результат проверки скидки
Этот код определяет размер скидки для покупателя. Сначала проверяется сумма покупки, затем — является ли покупатель участником клуба. Проследите всю цепочку логики и впишите итоговый размер скидки в поле ответа.
$purchase_amount = 2500;
$is_club_member = true;
$discount = 0;
if ($purchase_amount > 1000) {
if ($is_club_member) {
$discount = 20;
} else {
$discount = 10;
}
} else {
$discount = 5;
}
echo $discount;6. Соберите систему доступа к файлу
Соберите из фрагментов кода скрипт, который проверяет права доступа к файлу. Логика такова: сначала проверяется, является ли пользователь владельцем файла. Если да, ему разрешается чтение и запись. Если нет, то проверяется, является ли он гостем. Если гость — разрешается только чтение. Во всех остальных случаях доступ запрещен. Некоторые фрагменты лишние.
$user_type = 'guest';$is_owner = false;if ($is_owner) { echo "Чтение и запись разрешены.";} else { if ($user_type == 'guest') { echo "Разрешено только чтение."; } else { echo "Доступ запрещен."; }}echo "Проверка завершена.";if ($user_type == 'admin') {7. Найдите логическую ошибку
Программист хотел проверить числа, которые больше 100, а среди них — те, которые больше 200. Но он допустил логическую ошибку, из-за которой внутреннее условие никогда не сможет выполниться. Найдите строку с ошибкой и исправьте её так, чтобы она проверяла, если число меньше 200.
$value = 250; if ($value > 100) { echo "Число больше 100. "; if ($value < 50) { echo "И меньше 50... Это невозможно!"; }}