W3docs

Оператор if-else в PHP: Полное руководство

Изучите операторы if, else и elseif в PHP: синтаксис, вложенность, шаблонный синтаксис и тернарный оператор с примерами кода.

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

На этой странице рассматриваются простой if, добавление ветви else, цепочки условий с elseif, вложенность, синтаксис с двоеточием и endif для шаблонов, а также краткий тернарный оператор.

Оператор if

Оператор if выполняет блок кода только тогда, когда его условие равно true. Условие помещается в круглые скобки; выполняемый блок — в фигурные.

if (condition) {
  // runs only when condition is true
}

Условием может быть любое выражение, которое PHP может интерпретировать как boolean. Операторы сравнения (>, <, >=, <=, ==, ===, !=) и логические операторы (&&, ||, !) — обычные строительные блоки; полный список см. в разделе Операторы PHP.

<?php

$temperature = 30;

if ($temperature > 25) {
  echo "It's warm outside.";
}

?>

Поскольку 30 > 25 равно true, выводится It's warm outside.. Если бы условие было ложным, ничего бы не вывелось и PHP просто перешёл бы дальше.

Добавление ветви else

else предоставляет резервный блок, который выполняется, когда условие if является ложным. Выполняется ровно один из двух блоков — никогда оба и никогда ни один.

php— editable, runs on the server

Здесь $number > 0 истинно, поэтому выполняется первый блок и выводится 5 is a positive number. Если задать $number равным -3, первый блок будет пропущен и выполнится else, выведя -3 is a negative number.

Внимание на оператор. = присваивает значение, тогда как == сравнивает. Запись if ($number = 0) молча присваивает $number значение 0 и интерпретируется как false — классическая ошибка. Для сравнений используйте == (или строгий ===, который также проверяет тип).

Проверка нескольких условий с помощью elseif

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

php— editable, runs on the server

При $number = 0 первое условие (> 0) ложно, поэтому PHP переходит к elseif (== 0), которое истинно, и выводит 0 is zero. Как только ветвь совпадает, остаток цепочки пропускается — порядок имеет значение, поэтому ставьте наиболее специфичные условия первыми.

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

Вложенные операторы if

Блок if может содержать другой if для принятия решений, зависящих от предыдущего. Держите вложенность неглубокой — более двух-трёх уровней, как правило, сигнализирует о том, что логику следует разбить на функции.

<?php

$number = 5;

if ($number > 0) {
  if ($number % 2 == 0) {
    echo "$number is a positive even number";
  } else {
    echo "$number is a positive odd number";
  }
} else {
  echo "$number is not positive";
}

?>

Внешний if проверяет, что число положительное; внутренний if затем проверяет, является ли оно чётным ($number % 2 == 0). Поскольку 5 положительное и нечётное, выводится 5 is a positive odd number.

Альтернативный синтаксис (с двоеточием)

PHP также предлагает форму на основе двоеточия, заканчивающуюся endif. Она удобна, когда условия оборачивают HTML в шаблонах, где легко потерять незакрытые фигурные скобки.

<?php $loggedIn = true; ?>

<?php if ($loggedIn): ?>
  <p>Welcome back!</p>
<?php else: ?>
  <p>Please sign in.</p>
<?php endif; ?>

Поведение идентично форме с фигурными скобками — if (...): заменяет if (...) {, а endif; заменяет закрывающую }.

Тернарный оператор

Для простого присваивания по принципу «либо/либо» тернарный оператор ?: сжимает if/else в одно выражение: условие ? значение_если_истина : значение_если_ложь.

<?php

$age = 20;
$status = ($age >= 18) ? "adult" : "minor";

echo $status; // adult

?>

Это эквивалентно четырёхстрочному блоку if/else. Используйте его только для коротких условий; вложенные тернарные операторы быстро становятся нечитаемыми.

Резюме

  • if выполняет блок, когда его условие истинно; else предоставляет запасной вариант.
  • elseif добавляет дополнительные условия в цепочку, и побеждает первая истинная ветвь.
  • Операторы if могут быть вложенными, но держите вложенность неглубокой.
  • Синтаксис с двоеточием и endif удобен внутри HTML-шаблонов, а тернарный ?: сокращает простые выборы «либо/либо».
  • Всегда используйте для сравнений ==/===, а не присваивание =.

Далее изучите циклы PHP, чтобы повторять код, пока условие выполняется, и ознакомьтесь с переменными PHP — значениями, которые проверяют ваши условия.

Практика

Практика
Как в PHP реализовать условные операторы?
Как в PHP реализовать условные операторы?
Was this page helpful?