PHP if else для условной логики и ветвления
PHP if else вычисляет булево выражение и запускает один из двух или более блоков кода в зависимости от результата. Используйте elseif для цепочки дополнительных условий, когда исходы взаимоисключающие и зависят от порядка проверки. Выполняется только первая совпавшая ветка, поэтому самое строгое условие ставят первым. Это делает связку if/elseif/else базовой конструкцией для логики ветвления с диапазонами, составными выражениями и смешанными типами.
Пример PHP If Else для условного ветвления
Вывод:
Результат появится здесь...
Вывод:
Оценка: B
Как работает этот пример
$scoreхранит целочисленное значение82.- Условие
if$score >= 90даетfalse, поэтому PHP пропускает этот блок. - Условие
elseif$score >= 80даетtrue, поэтому PHP выполняет второй блок и выводитОценка: B. - Блок
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/elseif | switch | match (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 или массив соответствий обычно читается лучше.