PHP if else для условной логики и ветвления

PHP if else вычисляет булево выражение и запускает один из двух или более блоков кода в зависимости от результата. Используйте elseif для цепочки дополнительных условий, когда исходы взаимоисключающие и зависят от порядка проверки. Выполняется только первая совпавшая ветка, поэтому самое строгое условие ставят первым. Это делает связку if/elseif/else базовой конструкцией для логики ветвления с диапазонами, составными выражениями и смешанными типами.

Пример PHP If Else для условного ветвления

Вывод:

Результат появится здесь...

Вывод:

Оценка: B

Как работает этот пример

  1. $score хранит целочисленное значение 82.
  2. Условие if $score >= 90 дает false, поэтому PHP пропускает этот блок.
  3. Условие elseif $score >= 80 дает true, поэтому PHP выполняет второй блок и выводит Оценка: B.
  4. Блок else не выполняется, потому что предыдущая ветка уже совпала. После первого истинного условия PHP прекращает проверку цепочки.

Что такое elseif в PHP?

PHP elseif добавляет новое условие к существующему блоку if. PHP проверяет каждое elseif по порядку и выполняет первое выражение со значением true, после чего пропускает оставшуюся часть цепочки. Добавлять веток elseif можно сколько угодно, но если их больше трех-четырех, обычно чище использовать match или массив соответствий. В синтаксисе с фигурными скобками else if (два слова) и elseif (одно слово) работают одинаково, но в альтернативном синтаксисе (if: ... endif;) корректен только вариант elseif.

Частые ошибки в PHP If Else

Использование = вместо == или === в условиях

Неправильно:

if ($role = "admin") { // присваивает "admin" переменной $role, условие всегда истинно
    echo "Доступ разрешен";
}

Правильно:

if ($role === "admin") {
    echo "Доступ разрешен";
}

Присваивание внутри if меняет переменную и возвращает присвоенное значение, из-за чего ветка может выполняться безусловно.

Опираться на отступы вместо фигурных скобок (dangling else)

Неправильно:

if ($isAdmin)
    if ($isActive)
        echo "ok";
    else
        echo "не админ"; // привязывается к внутреннему if

Правильно:

if (!$isAdmin) {
    echo "не админ";
} elseif ($isActive) {
    echo "ok";
}

Без фигурных скобок else связывается с ближайшим незавершенным if. Используйте скобки или перестраивайте логику в единую цепочку if/elseif/else.

PHP If/Elseif vs Switch vs Match

Характеристикаif/elseifswitchmatch (PHP 8+)
Тип сравненияЛюбое выражениеНестрогое (==)Строгое (===)
Возвращает значениеНетНетДа
Fall-throughН/ДДа, если нет breakНет
Лучше всего подходит дляДиапазоны, составные условияМного дискретных значений с общей логикойСтрогое сопоставление значения с результатом

Используйте if/elseif, когда условия включают диапазоны, составную логику или вызовы функций. Переходите на match, когда сопоставляете дискретные значения с результатом и нужен строгий типовой контроль. Используйте switch, когда нужен fall-through или отдельные блоки операторов для каждого case.

Больше примеров

Guard clause для уменьшения вложенности:

function process($input) {
    if (!is_string($input)) {
        return "неверный тип";
    }
    if ($input === "") {
        return "пустая строка";
    }
    return strtoupper($input);
}

Ранние return заменяют вложенные деревья if/else и оставляют основную логику на верхнем уровне отступа.

Краткая форма тернарного оператора для простых присваиваний из двух веток:

$label = ($count > 0) ? "есть элементы" : "пусто";

Когда ветка возвращает одно значение, тернарный оператор ? : заменяет полноценный блок if/else в одном выражении.

FAQ

В чем разница между elseif и else if в PHP?

В синтаксисе с фигурными скобками ({ }) это эквивалентные формы: PHP трактует else if как else с вложенным if. В альтернативном синтаксисе (if: ... endif;) компилируется только elseif в одно слово. Используйте elseif везде, чтобы избежать ошибок при рефакторинге между стилями.

Что использовать в условиях PHP: == или ===?

== выполняет приведение типов: 0 == "foo" дает true в PHP 7 (в PHP 8 это изменено на false для нечисловых строк). === сравнивает и значение, и тип без приведения. Для предсказуемого поведения, особенно с пользовательским вводом и смешанными типами, предпочитайте ===.

Можно ли использовать несколько веток elseif в PHP?

Да. PHP позволяет неограниченное число веток elseif в одной цепочке. Условия проверяются по порядку, и выполняется только первая истинная ветка. Если ни одна не подошла и есть else, она работает как ветка по умолчанию. Когда цепочка разрастается больше чем до четырех-пяти веток, match или массив соответствий обычно читается лучше.