W3docs

elseif

Ключевое слово "elseif" в PHP — управляющая структура, которая добавляет дополнительное условие к оператору "if"

Ключевое слово elseif в PHP

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

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

Синтаксис

<?php

if (condition1) {
  // runs if condition1 is true
} elseif (condition2) {
  // runs if condition1 is false AND condition2 is true
} elseif (condition3) {
  // runs if condition1 and condition2 are false AND condition3 is true
} else {
  // runs if none of the above conditions are true
}

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

Простой пример

<?php

$myNumber = 5;

if ($myNumber == 4) {
  echo "Number is 4";
} elseif ($myNumber == 5) {
  echo "Number is 5";
} else {
  echo "Number is not 4 or 5";
}

// Output: Number is 5

Поскольку $myNumber == 4 ложно, а $myNumber == 5 истинно, выполняется второй блок, и else никогда не достигается.

«Попробуйте сами» недоступно для этого примера.

Цепочка из нескольких условий

elseif незаменим, когда нужно сопоставить значение с несколькими взаимоисключающими диапазонами. Первая подходящая ветка побеждает, поэтому располагайте условия от наиболее конкретных к наиболее общим:

<?php

$score = 82;

if ($score >= 90) {
  $grade = "A";
} elseif ($score >= 80) {
  $grade = "B";
} elseif ($score >= 70) {
  $grade = "C";
} else {
  $grade = "F";
}

echo "Grade: {$grade}";

// Output: Grade: B

Оценка 82 не проходит первый тест (>= 90), но проходит второй (>= 80), поэтому $grade становится "B", а оставшиеся ветки пропускаются.

elseif vs else if

PHP принимает оба варианта — elseif (одним словом) и else if (двумя словами) — они ведут себя одинаково при использовании фигурных скобок:

<?php

$x = 2;

if ($x === 1) {
  echo "one";
} else if ($x === 2) {   // same as elseif
  echo "two";
}

// Output: two

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

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

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

<?php

$role = "editor";

if ($role === "admin"):
  echo "Full access";
elseif ($role === "editor"):
  echo "Can edit content";
else:
  echo "Read only";
endif;

// Output: Can edit content

Этот синтаксис хорошо сочетается с ключевым словом endif в HTML-шаблонах. Подробнее читайте в обзоре if / else / elseif.

Распространённые ошибки

  • = вместо ==. Внутри условия = выполняет присваивание, а не сравнение. Используйте == для нестрогого сравнения или === для строгого (с учётом типа).
  • Порядок имеет значение. Поскольку побеждает первая истинная ветка, широкое условие, размещённое раньше, может перекрыть более конкретные условия ниже. В примере с оценками, если поставить $score >= 70 первым, каждый зачётный балл получил бы оценку "C".
  • elseif требует ведущего if. Он не может стоять отдельно — он всегда принадлежит существующей цепочке if.

Когда использовать elseif, а когда switch

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

Смотрите также

  • if — оператор, который elseif расширяет
  • else — универсальная резервная ветка
  • endif — закрывает форму с синтаксисом двоеточия
  • switch — многовариантное ветвление по одному значению

Практика

Практика
Что верно об операторе 'elseif' в PHP?
Что верно об операторе 'elseif' в PHP?
Was this page helpful?