W3docs

if

Ключевое слово «if» в PHP позволяет условно выполнять код. В этой статье рассмотрены синтаксис и использование оператора «if» в PHP.

Оператор if в PHP

Оператор if — это механизм принятия решений в PHP. Он выполняет блок кода только тогда, когда условие истинно, и пропускает его в противном случае. Без него скрипт выполнял бы каждую строку сверху вниз, не имея возможности разветвляться — if является основой всей условной логики в PHP.

В этом руководстве рассматриваются синтаксис, то как PHP определяет, является ли условие «истинным», семейство операторов else/elseif, альтернативный синтаксис endif для шаблонов, сокращённые формы — тернарный оператор и оператор объединения с null, а также ошибки, которые часто совершают новички.

Базовый синтаксис

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

condition — это любое выражение, которое PHP может вычислить как истинное или ложное. Если оно истинно, выполняется код внутри фигурных скобок; если ложно, PHP пропускает блок и продолжает выполнение после него.

<?php
$age = 20;

if ($age >= 18) {
  echo "You are an adult.";
}
// Output: You are an adult.

Фигурные скобки необязательны, когда тело состоит из одного оператора, однако всегда используйте их — отсутствие скобок является частым источником ошибок, поскольку только первый оператор считается телом блока:

if ($age >= 18)
  echo "Adult";        // runs conditionally
  echo " — welcome";   // ⚠️ runs ALWAYS, it is not part of the if

Как PHP вычисляет условия (truthy и falsy)

Условие не обязано быть буквальным true/false — PHP преобразует любое значение в boolean. Следующие значения считаются falsy (ложными):

  • false
  • 0 и 0.0
  • "" (пустая строка) и "0"
  • null
  • пустой массив []

Все остальные значения являются truthy. Это позволяет писать компактные проверки:

<?php
$name = "";

if ($name) {
  echo "Hello, $name";
} else {
  echo "No name provided.";   // empty string is falsy
}
// Output: No name provided.

Для составления условий обычно используются операторы сравнения и логические операторы. Полный список см. в PHP Operators.

<?php
$temp = 30;

if ($temp > 25 && $temp < 35) {     // logical AND
  echo "Warm but comfortable.";
}
// Output: Warm but comfortable.

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

Одиночный if обрабатывает только один путь. Чтобы задать запасной вариант, добавьте else; для последовательной проверки нескольких условий используйте цепочку elseif:

<?php
$score = 72;

if ($score >= 90) {
  echo "Grade: A";
} elseif ($score >= 70) {
  echo "Grade: B";
} elseif ($score >= 50) {
  echo "Grade: C";
} else {
  echo "Grade: F";
}
// Output: Grade: B

PHP проверяет каждое условие сверху вниз и выполняет первый блок, условие которого истинно, затем останавливается. Поскольку $score равно 72, проверка >= 90 не проходит, >= 70 проходит, а остальные пропускаются.

Подробные главы по этим операторам: PHP else, PHP elseif и полное руководство if...elseif...else. Когда нужно сравнить одну переменную со многими фиксированными значениями, оператор switch часто выглядит нагляднее.

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

Можно поместить if внутрь другого, чтобы проверить второе условие только при выполнении первого:

<?php
$loggedIn = true;
$role = "admin";

if ($loggedIn) {
  if ($role === "admin") {
    echo "Welcome to the admin panel.";
  } else {
    echo "Welcome back.";
  }
}
// Output: Welcome to the admin panel.

Глубокое вложение снижает читаемость — если вы обнаруживаете себя на третьем уровне вложенности, рассмотрите возможность объединения условий через && или раннего возврата.

Альтернативный синтаксис (if: / endif)

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

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

Поведение аналогично варианту с фигурными скобками — это исключительно вопрос стиля для файлов представлений.

Сокращения: тернарный оператор и объединение с null

Для простых присваиваний «одно из двух» тернарный оператор сжимает if/else в одну строку:

<?php
$age = 16;
$status = ($age >= 18) ? "adult" : "minor";
echo $status;
// Output: minor

Когда важно лишь то, существует ли значение (и не равно ли оно null), оператор объединения с null ?? чище, чем if (isset(...)):

<?php
$config = [];
$timeout = $config["timeout"] ?? 30;   // use 30 if the key is missing
echo $timeout;
// Output: 30

Практические примеры

<?php

// Example 1
$num = 10;

if ($num > 5) {
  echo "The number is greater than 5." . PHP_EOL;
}

// Output: The number is greater than 5.

// Example 2
$color = "red";

if ($color == "blue") {
  echo "The color is blue.";
} else {
  echo "The color is not blue.";
}

// Output: The color is not blue.

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

  • = вместо ==. Выражение if ($x = 5) присваивает 5 переменной $x и всегда является истинным. Для сравнения используйте == (нестрогое) или === (строгое, без приведения типов).
  • == против ===. С == выражения 0 == "hello" и "1" == 1 могут удивить, потому что PHP приводит типы. Предпочитайте ===, когда типы должны совпадать.
  • Отсутствующие фигурные скобки вокруг многострочного тела — условным является только первый оператор.
  • Путаница с truthy-значениями. Выражение if ($value) ложно для 0, "" и []; используйте isset() или === null, когда конкретно проверяете наличие значения.

Заключение

Оператор if позволяет PHP-программе выбирать действие во время выполнения. Освойте правила truthy/falsy, используйте elseif/else для обработки нескольких путей, применяйте альтернативный синтаксис endif в шаблонах и пользуйтесь тернарным оператором и ?? для лаконичных присваиваний. Далее изучите циклы PHP для повторения действий и оператор switch для ветвления по значениям.

Практика

Практика
Как в PHP заставить программу решать, какой блок кода выполнить?
Как в PHP заставить программу решать, какой блок кода выполнить?
Was this page helpful?