Вложенные условия

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

Вложенные условия — это когда одна условная конструкция `if` находится внутри другой. Это позволяет создавать более сложную и точечную логику. Представьте себе систему доступа: сначала мы проверяем, есть ли у человека ключ-карта (первое, внешнее условие). Если есть, мы проверяем, соответствует ли его уровень доступа нужной зоне (второе, вложенное условие). Только если оба условия последовательно выполняются, доступ разрешается. Этот подход позволяет отсекать ненужные проверки и делать код более структурированным. В этом уроке мы научимся правильно создавать вложенные условия, исправлять типичные ошибки, связанные с ними (например, с фигурными скобками), и собирать из частей сложные логические проверки для реальных сценариев.

Список тем

1. Простое вложенное условие

id: 38938_task_nested_1

В коде уже есть проверка, авторизован ли пользователь. Добавьте вложенное условие, которое внутри первой проверки будет определять, является ли роль пользователя 'admin'. Заполните пропуски, чтобы завершить код.

Заполните пропуски
$is_logged_in = true;
$role = "admin";

if ($is_logged_in == true) {
    echo "Пользователь авторизован. ";
    input1S (input2S == "admin") {
        echo "Добро пожаловать, Администратор!";
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Что выведет этот код?

id: 38938_task_nested_2

Проследите за логикой выполнения этого кода. Сначала проверяется возраст пользователя, а затем, если он совершеннолетний, проверяется наличие у него водительских прав. Выберите, какой текст в итоге будет выведен на экран.

Выберите правильный вариант ответа
$age = 25;
$has_license = false;

if ($age >= 18) {
    if ($has_license == true) {
        echo "Можно водить машину.";
    } else {
        echo "Совершеннолетний, но нет прав.";
    }
} else {
    echo "Водить машину нельзя.";
}
Сообщения
Проверить
Показать подсказку

3. Ошибка в сравнении

id: 38938_task_nested_3

В этом коде допущена одна из самых частых ошибок новичков: вместо оператора сравнения `==` используется оператор присваивания `=`. Это не вызывает синтаксической ошибки, но приводит к неверной логике работы. Найдите строку с ошибкой и исправьте её.

Найдите ошибку и исправьте
<?php
$user_role = "editor";
$document_status = "published";
 
if ($user_role == "editor") {
    if ($document_status = "new") {
        echo "Можно редактировать новый документ.";
    } else {
        echo "Можно комментировать опубликованный документ.";
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Заполните пропуски в структуре

id: 38938_task_nested_4

Код проверяет, доступен ли товар. Если да, то он проверяет, подходит ли цена для специального предложения. Заполните пропуски, перетащив ключевые слова из банка, чтобы создать правильную вложенную `if-else` структуру.

Нужно правильно расставить в пропуски предложенные варианты
$is_available = true;
$price = 120;

input1S ($is_available) {
    echo "Товар в наличии. ";

    input2S ($price < 100) {
        echo "Специальное предложение!";
    } input3S {
        echo "Стандартная цена.";
    }
}
if
else
elseif
for
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Предскажите результат проверки скидки

id: 38938_task_nested_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. Соберите систему доступа к файлу

id: 38938_task_nested_6

Соберите из фрагментов кода скрипт, который проверяет права доступа к файлу. Логика такова: сначала проверяется, является ли пользователь владельцем файла. Если да, ему разрешается чтение и запись. Если нет, то проверяется, является ли он гостем. Если гость — разрешается только чтение. Во всех остальных случаях доступ запрещен. Некоторые фрагменты лишние.

Перетяните в правильном порядке строки из одного блока в другой
$user_type = 'guest';
$is_owner = false;
if ($is_owner) {
    echo "Чтение и запись разрешены.";
} else {
    if ($user_type == 'guest') {
        echo "Разрешено только чтение.";
    } else {
        echo "Доступ запрещен.";
    }
}
echo "Проверка завершена.";
if ($user_type == 'admin') {
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

7. Найдите логическую ошибку

id: 38938_task_nested_7

Программист хотел проверить числа, которые больше 100, а среди них — те, которые больше 200. Но он допустил логическую ошибку, из-за которой внутреннее условие никогда не сможет выполниться. Найдите строку с ошибкой и исправьте её так, чтобы она проверяла, если число меньше 200.

Найдите ошибку и исправьте
$value = 250;
 
if ($value > 100) {
    echo "Число больше 100. ";
    if ($value < 50) {
        echo "И меньше 50... Это невозможно!";
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

PHP: запуск кода в браузере

id: 38938_compiler
🐘
Запустить тренажёр (PHP)
НайтиКурс.Ру