PHP Курс

Условия и циклы в PHP

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

Урок №3: Управление потоком в PHP

Введение: Почему программа должна думать?

Представь, что ты — робот, который сортирует фрукты. Если ты видишь яблоко — кладёшь его в одну коробку, если апельсин — в другую. Ты не делаешь одно и то же всегда, а принимаешь решения. Точно так же работают программы! В этом уроке мы научим PHP «думать» и выбирать, что делать в разных ситуациях.

В реальной жизни мы постоянно принимаем решения:

  • «Если на улице дождь — возьми зонт, иначе — иди без зонта»
  • «Если у тебя есть 100 рублей — купи пирожок, если 200 — пирожок и сок»
  • «Пока не выучишь уроки — не включай компьютер»

Точно такие же конструкции есть в PHP! Сегодня мы изучим:

  • Условные операторы (if, else, elseif) — для выбора действий
  • Оператор switch — для множества вариантов
  • Тернарный оператор — короткая запись условий
  • Циклы (while, for, foreach) — для повторения действий

1. Условный оператор if: «Если… то…»

Самый простой способ заставить программу принимать решения — использовать конструкцию if. Она работает как обычное условие в жизни:

ЕСЛИ (условие верно) ТО (сделай что-то)

Давай напишем программу, которая проверяет, можно ли ребёнку смотреть фильм (возраст должен быть 12+):

= 12) { // если возраст больше или равен 12
    echo "Можешь смотреть фильм!"; // это выполнится, если условие верно
}
?>

Разберём по частям:

  • if — ключевое слово, начинающее условие
  • ($age >= 12) — условие в круглых скобках
  • { ... } — блок кода, который выполнится, если условие истинно
  • >= — оператор сравнения «больше или равно»

Операторы сравнения в PHP:

  • == — равно (сравнение значений)
  • === — тождественно равно (сравнение значений И типов)
  • != — не равно
  • > — больше
  • < — меньше
  • >= — больше или равно
  • <= — меньше или равно

Пример с разными условиями:

 30) {
    echo "Очень жарко, надень шорты!";
}

if ($temperature < 10) {
    echo "Холодно, надень куртку!";
}

// Можно комбинировать условия
if ($temperature >= 20 && $temperature <= 25) {
    echo "Идеальная погода для прогулки!";
}
?>

Обрати внимание на && — это логический оператор «И». Он означает, что оба условия должны быть истинными. Есть ещё || — «ИЛИ» (хотя бы одно условие истинно).

2. else: «Иначе…»

Часто нужно сделать одно действие, если условие верно, и другое — если нет. Для этого используется else:

Можно записать короче, потому что $hasUmbrella уже является логическим значением (true/false):

Запомни: если переменная уже содержит true/false, не нужно писать == true. Просто используй переменную в условии.

3. elseif: «Иначе если…»

Когда вариантов больше двух, на помощь приходит elseif. Представь, что мы оцениваем оценку ученика:

= 90) {
    echo "Отлично! Ты получил 5!";
} elseif ($score >= 75) {
    echo "Хорошо! Твоя оценка - 4!";
} elseif ($score >= 50) {
    echo "Удовлетворительно. Тройка.";
} else {
    echo "К сожалению, это 2. Нужно учить лучше!";
}
?>

Как это работает:

  1. PHP проверяет первое условие ($score >= 90). Если оно истинно — выполняет соответствующий блок и выходит из всей конструкции.
  2. Если первое условие ложно — проверяет второе ($score >= 75), и так далее.
  3. Если ни одно условие не подошло — выполняется блок else (если он есть).

Важно: порядок условий имеет значение! Если бы мы написали сначала $score >= 50, то при 85 баллах программа сказала бы «тройка», хотя это явно четвёрка. Всегда ставь самые строгие условия первыми.

4. Логические операторы: И, ИЛИ, НЕ

В жизни мы часто комбинируем условия: «Если на улице холодно И идёт дождь, я останусь дома». В PHP для этого есть специальные операторы:

  • && (И) — оба условия должны быть истинными
  • || (ИЛИ) — хотя бы одно условие истинно
  • ! (НЕ) — отрицание (меняет true на false и наоборот)

Пример с И (&&):

Пример с ИЛИ (||):

Пример с НЕ (!):

Обрати внимание: !$isRaining — это то же самое, что $isRaining == false. Просто короче.

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

Иногда одно условие находится внутри другого. Это называется «вложенные условия». Например:

= 18) {
    echo "Можешь голосовать!";
} else {
    // Если возраст меньше 18, проверяем дополнительно
    if ($hasParentalConsent) {
        echo "Можешь участвовать с разрешения родителей!";
    } else {
        echo "Извини, нужно разрешение родителей.";
    }
}
?>

Вложенные условия — это нормально, но старайся не делать их слишком глубокими (больше 2-3 уровней), иначе код становится сложным для чтения.

6. Оператор switch: когда много вариантов

Представь, что ты пишешь программу для автомата с напитками. Пользователь нажимает кнопку, и автомат выдаёт определённый напиток. Если использовать if, код будет громоздким. Для таких случаев есть switch:

Как это работает:

  1. switch ($drink) — мы передаём переменную для проверки
  2. case "cola": — если значение переменной равно "cola", выполняем этот блок
  3. break; — обязательно! Он прерывает выполнение switch. Без него PHP выполнит все следующие case подряд!
  4. default: — выполняется, если ни один case не подошёл (аналог else)
  5. Пример без break (чтобы понять, почему он важен):

    Это называется «проваливание» (fall-through). Иногда это полезно, но чаще — ошибка. Всегда ставь break, если не хочешь такого поведения.

    7. Тернарный оператор: короткая запись if-else

    Если нужно сделать простой выбор между двумя значениями, можно использовать тернарный оператор. Он работает как сокращённый if-else:

    = 18) {
        $status = "взрослый";
    } else {
        $status = "ребёнок";
    }
    
    // Тернарный оператор делает то же самое в одну строку:
    $status = ($age >= 18) ? "взрослый" : "ребёнок";
    
    echo "Статус: $status";
    ?>

    Структура тернарного оператора:

    (условие) ? значение_если_true : значение_если_false

    Тернарный оператор удобен для коротких условий, но не злоупотребляй им — если условие сложное, лучше использовать обычный if-else для читаемости.

    8. Цикл while: «Пока… делай…»

    Циклы позволяют выполнять один и тот же блок кода много раз. Первый цикл — while — работает как «пока условие верно, делай действие».

    Аналогия из жизни: «Пока не съешь всю кашу — не встанешь из-за стола». Условие — «каша не съедена», действие — «есть кашу».

     0) {
        echo "Ем ложку каши... Осталось: $bowl\n";
        $bowl--; // уменьшаем количество на 1
    }
    
    echo "Каша съедена! Можно гулять!";
    ?>

    Разберём:

    • while ($bowl > 0) — проверяем условие перед каждой итерацией
    • $bowl-- — уменьшаем переменную на 1 (это важно, иначе цикл будет бесконечным!)
    • Цикл выполняется, пока $bowl > 0. Как только $bowl становится 0, условие ложно, и цикл завершается.

    Важно: если забыть изменить переменную в условии, получится бесконечный цикл — программа будет выполняться вечно (или до переполнения памяти). Всегда проверяй, что условие когда-нибудь станет ложным.

    Пример с бесконечным циклом (не делай так!):

     0) {
        echo "Бесконечность! ";
        // $x никогда не меняется, условие всегда true
    }
    ?>

    9. Цикл for: «Повтори N раз»

    Цикл for используется, когда мы точно знаем, сколько раз нужно повторить действие. Он компактнее while для таких случаев.

    Структура цикла for:

    for (начало; условие; шаг) { тело цикла }

    Пример: вывести числа от 1 до 10:

    ";
    }
    ?>

    Как это работает пошагово:

    1. Начало: $i = 1 — выполняется один раз в начале
    2. Условие: $i <= 10 — проверяется перед каждой итерацией. Если true — выполняем тело, если false — выходим из цикла
    3. Тело: echo "Число: $i
      ";
      — то, что повторяется
    4. Шаг: $i++ — выполняется после каждой итерации (увеличиваем счётчик на 1)

    Другой пример: таблица умножения на 5:

    ";
    }
    ?>

    Цикл for очень гибкий. Можно шагать не по одному, а, например, по два:

    10. Цикл foreach: для массивов

    Когда у нас есть массив (список элементов), удобно использовать foreach. Он перебирает каждый элемент массива автоматически.

    Пример: список друзей:

    ";
    foreach ($friends as $friend) {
        echo "- $friend
    "; } ?>

    Можно также получить и ключ (индекс) элемента:

     5,
        "Мария" => 4,
        "Пётр" => 3
    ];
    
    foreach ($students as $name => $grade) {
        echo "$name получил оценку: $grade
    "; } ?>

    Цикл foreach — самый безопасный для массивов, потому что он автоматически проходит по всем элементам и не требует счётчика.

    11. break и continue: управление циклами

    Иногда нужно прервать цикл досрочно (break) или пропустить текущую итерацию (continue).

    break — прерывание цикла:

    ";
    }
    ?>

    continue — пропуск итерации:

    continue полезен, когда нужно пропустить обработку некоторых элементов без выхода из цикла.

    12. Практические примеры: объединяем всё вместе

    Пример 1: Игра «Угадай число»

    ";
    
    while ($attempts < $maxAttempts) {
        $guess = rand(1, 10); // имитация ввода пользователя
        $attempts++;
        
        echo "Попытка $attempts: ты называешь $guess
    "; if ($guess == $secretNumber) { echo "Поздравляю! Ты угадал число $secretNumber за $attempts попыток!
    "; break; } elseif ($guess < $secretNumber) { echo "Моё число больше!
    "; } else { echo "Моё число меньше!
    "; } } if ($attempts == $maxAttempts && $guess != $secretNumber) { echo "К сожалению, попытки закончились. Я загадал $secretNumber.
    "; } ?>

    Пример 2: Калькулятор оценок

    Средний балл: $average
    "; // Определяем итоговую оценку if ($average >= 90) { $grade = 5; $comment = "Отлично!"; } elseif ($average >= 75) { $grade = 4; $comment = "Хорошо!"; } elseif ($average >= 50) { $grade = 3; $comment = "Удовлетворительно."; } else { $grade = 2; $comment = "Нужно подтянуть знания!"; } echo "Итоговая оценка: $grade. $comment"; ?>

    13. Типичные ошибки новичков

    1. Забытые фигурные скобки — если в блоке if/else/while только одна команда, скобки можно не ставить, но лучше всегда ставить для ясности.
    2. Путаница между = и == — = это присваивание, == это сравнение. Ошибка if ($x = 5) всегда будет true!
    3. Бесконечные циклы — всегда проверяй, что условие цикла когда-нибудь станет false.
    4. Забытый break в switch — без break выполнение «провалится» в следующий case.
    5. Неправильный порядок условий — в if-elseif более строгие условия должны быть первыми.

    Практические задания

    А теперь попробуй сам! Вот три задания разной сложности. Постарайся выполнить их самостоятельно, используя то, что мы сегодня выучили.

    Задание 1 (лёгкое): Определитель времени суток

    Напиши программу, которая принимает текущий час (от 0 до 23) и выводит:

    • «Утро» — если час от 6 до 11
    • «День» — если час от 12 до 17
    • «Вечер» — если час от 18 до 22
    • «Ночь» — если час от 23 до 5

    Используй if-elseif-else. Проверь программу с разными значениями.

    Задание 2 (среднее): Таблица умножения

    Используя цикл for, выведи таблицу умножения для числа 7 (от 1 до 10). Формат вывода: «7 x 1 = 7», «7 x 2 = 14» и так далее.