Menu

Условия if, elseif и else в PHP с примерами

if (condition) { ... } выполняет блок, только когда условие истинно, elseif проверяет следующее условие, а else срабатывает, когда ничего не подошло. elseif и else if, && и ||, истинные значения и синтаксис if: endif; для HTML-шаблонов.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

if (condition) { ... } выполняет свой блок, только когда условие истинно. Добавьте elseif (other condition) { ... } для других случаев и else { ... } для всего остального. PHP проверяет условия сверху и выполняет только первый подходящий блок.

Измените $temperature и запустите снова. Поскольку проверки идут сверху вниз, 24 останавливается на втором условии и не доходит до >= 10, хотя оно тоже истинно. Располагайте условия от самого конкретного к самому общему.

elseif и else if

С фигурными скобками elseif и else if делают одно и то же. Формально else if это else, телом которого служит новый if, но результат одинаковый.

Разница проявляется только в синтаксисе через двоеточие, который используют в шаблонах (следующие разделы). Там else if ломает код:

<?php $score = 72; ?>
<?php if ($score >= 90): ?>
    <p>A</p>
<?php else if ($score >= 60): ?>
    <p>Passed</p>
<?php endif; ?>
PHP Parse error:  syntax error, unexpected token "if", expecting ":" in /home/index.php on line 4

Пишите elseif одним словом, и вы никогда не встретите эту ошибку.

Несколько условий через && и ||

&& (и) требует, чтобы обе стороны были истинны, || (или) требует хотя бы одну, а ! инвертирует условие. PHP прекращает вычисление, как только ответ известен, поэтому в $user !== null && $user['active'] вторая часть выполняется, только когда пользователь есть.

Когда смешиваете && и ||, ставьте скобки: && связывает сильнее, а скобки делают намерение очевидным для следующего читателя. В PHP есть и ключевые слова and и or, но их приоритет ниже, чем у =, поэтому $ok = true and false; присваивает $ok значение true. Пользуйтесь && и ||.

Что считается истинным в if

Условие не обязано быть логическим значением. PHP приводит его, и ложными считается небольшой набор значений: false, 0, 0.0, "", "0", [] и null. Всё остальное истинно, включая "false", " " и "0.0".

Как if ($x) видит каждое значение
Point at or tap a cell to read it as PHP.
$xboolempty
false
0
0.0
""
"0"
null
[]
" "
"0.0"
"a"
[0]
1
Every cell computed by PHP 8.3.19.

Поэтому if ($items) часто используют в смысле "массив не пуст". Подвох в строке с "0": поле формы, в которое кто-то ввёл 0, это непустая строка, но if ($_POST['qty']) считает её ложной. Если ноль допустимый ответ, сравнивайте явно (if ($qty !== '')). По тем же правилам работает и empty().

if else в HTML через if: и endif;

Между HTML-тегами фигурные скобки легко потерять. В PHP есть альтернативный синтаксис: двоеточие после условия, elseif ...: и else: для других веток и endif; в конце. Запустите этот блок и нажимайте на оценки во вкладке Page: каждая ссылка запускает тот же скрипт снова с новым $_GET['score'].

<?= $score ?> это короткая запись <?php echo $score; ?>. Такой же стиль с двоеточием есть и для циклов (foreach: endforeach;, while: endwhile;), и именно его используют большинство PHP-шаблонов.

if в одну строку и тернарный оператор

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

Когда одну переменную нужно сравнить со множеством точных значений, выражение match читается лучше длинной цепочки elseif.

Ранний return вместо вложенности

Глубоко вложенные блоки if трудно читать. Внутри функции сначала проверьте случаи ошибок и сразу делайте return. Тогда основная логика остаётся у левого края.

Частая ошибка: = вместо == в условии

Одиночный = присваивает. if ($role = 'admin') сохраняет 'admin' в $role и затем проверяет эту строку, а она истинна. Блок выполняется для любого пользователя, и $role к тому же испорчена.

Для сравнений используйте ===, если у вас нет причины хотеть приведения типов. Некоторые пишут константу первой (if ('admin' === $role)), чтобы пропущенный = превращался в ошибку, а не в молчаливое присваивание.

Часто задаваемые вопросы

Чем elseif отличается от else if в PHP?

С фигурными скобками они ведут себя одинаково: else if это else, телом которого служит ещё один if. С синтаксисом через двоеточие (if (...): ... endif;) работает только elseif, а else if вызывает ошибку разбора. Если везде писать elseif, разница не возникает.

Как проверить несколько условий в if в PHP?

Соедините их через && (все должны быть истинны) или || (хотя бы одно): if ($age >= 18 && $hasTicket) { ... }. Когда смешиваете оба оператора, ставьте скобки, например if ($isAdmin || ($isOwner && $isActive)).

Как записать if в одну строку в PHP?

Одна инструкция может идти за условием без фигурных скобок: if ($debug) echo 'debug mode';. Чтобы выбрать одно из двух значений в одной строке, используйте тернарный оператор: $label = $count === 1 ? 'item' : 'items';.

Как использовать if else внутри HTML в PHP?

Используйте альтернативный синтаксис, он хорошо читается между HTML-тегами: <?php if ($loggedIn): ?> <p>Welcome back</p> <?php else: ?> <a href="/login">Log in</a> <?php endif; ?>.

Иллюстрация языков программирования Coddy

Учитесь программировать с Coddy

НАЧАТЬ