PHP: использование if else и альтернативные способы ветвления

Раздел: Основы PHP -> Управляющие конструкции

Условные операторы if-else в PHP

Основной способ ветвления в PHP - конструкция if-elseif-else. Она позволяет выполнять различные блоки кода в зависимости от истинности выражений.


$age = 20;
if ($age < 18) {
    echo "Несовершеннолетний";
} elseif ($age < 65) {
    echo "Взрослый";
} else {
    echo "Пенсионер";
}
    

Php условия (условные операторы if-else в php)

Взрослый

Php case (конструкция case в php)

Проверка идёт последовательно: первое истинное условие выполняется, остальные пропускаются. else необязателен, но рекомендуется для обработки всех остальных случаев.

Типичные ошибки:

  • Путать = (присваивание) и == (сравнение).
  • Забывать фигурные скобки при нескольких операторах в блоке - выполнится только первый.
  • Использовать else if как два слова (допустимо, но с пробелом, хотя лучше elseif слитно).

Как реализовать простое условие без else?

Иногда требуется выполнить действие только при истинности, остальное игнорируется.


$isLogged = true;
if ($isLogged) {
    echo "Пользователь авторизован";
}
    

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

Как сократить запись для простого присваивания?

Используется тернарный оператор ? : для выбора одного из двух значений.


$age = 20;
$status = ($age >= 18) ? "Взрослый" : "Несовершеннолетний";
echo $status;
    
Взрослый

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

Как проверить существование переменной и присвоить значение по умолчанию?

Оператор объединения с null (??) возвращает первый операнд, если он не null, иначе второй.


$username = $_GET['user'] ?? 'Гость';
echo $username;
    

Цель: безопасное получение значений из массивов или свойств объектов без предварительной проверки isset(). Проблема: не отличает отсутствие ключа от значения null.

Как совместить проверку на истинность с присваиванием?

Элвис-оператор ? : (сокращённый тернарный) - если первое выражение истинно, оно и возвращается, иначе второе.


$count = 0;
$result = $count ?: 10;
echo $result; // 10, потому что 0 приводится к false
    

Цель: отбросить ложные значения (0, '', false, null) и заменить их альтернативой. Проблема: так можно потерять допустимое нулевое значение.

Как организовать множественные проверки с вложенными if?

Вложенные конструкции применяются при необходимости проверки нескольких связанных условий.


$role = 'admin';
$hasPermission = true;
if ($role == 'admin') {
    if ($hasPermission) {
        echo "Доступ разрешён";
    } else {
        echo "Нет прав";
    }
} else {
    echo "Неизвестная роль";
}
    

Цель: группировка логики по иерархии. Проблема: глубокая вложенность усложняет чтение, лучше использовать логические операторы && или ранний выход (return).

Как использовать альтернативный синтаксис с двоеточием?

В шаблонах (например, в смешанном PHP/HTML коде) удобна форма if: ... endif;.


<?php if ($user == 'admin'): ?>
    <p>Привет, администратор!</p>
<?php else: ?>
    <p>Привет, гость.</p>
<?php endif; ?>
    

Цель: улучшить читаемость при вёрстке. Проблема: редко встречается в чистом PHP коде, может сбивать с толку при отладке.

Расширенные примеры использования условных операторов

Пример 1. Комбинированная проверка с логическими операторами

Пример

$age = 25;
$hasLicense = true;
$isSuspended = false;

if ($age >= 18 && $hasLicense && !$isSuspended) {
    echo "Можно арендовать автомобиль";
} else {
    echo "Аренда невозможна";
}
Можно арендовать автомобиль

Пояснение: все три условия должны быть истинны. Оператор && даёт короткое замыкание: при ложном первом условии остальные не проверяются. Это ускоряет выполнение и предотвращает ошибки (например, если бы $age было меньше 18, то $hasLicense не проверялось бы).

Пример 2. Использование тернарного оператора в возвращаемом значении функции

Пример

function getDiscount($total) {
    return ($total > 100) ? $total * 0.1 : 0;
}

echo getDiscount(150); // 15
echo getDiscount(50);  // 0
15 0

Пояснение: функция возвращает скидку 10% если сумма больше 100, иначе 0. Тернарный оператор здесь уместен, так как условие простое. При более сложной логике стоит вернуться к if.

Пример 3. Вложенные тернарные операторы (не рекомендуется, но для полноты)

Пример

$score = 85;
$grade = ($score >= 90) ? 'A' : (($score >= 80) ? 'B' : (($score >= 70) ? 'C' : 'F'));
echo $grade; // B
B

Пояснение: такая запись крайне трудна для восприятия. Лучше заменить на if-elseif.

Пример 4. Проверка типа переменной с помощью if и is_int()

Пример

$value = 42;
if (is_int($value)) {
    echo "Целое число: $value";
} else {
    echo "Другой тип";
}
Целое число: 42

Пояснение: is_int() - одна из функций проверки типов. Важно: is_numeric() вернёт true для строки "42" тоже, поэтому контекст решает.

Пример 5. Использование else if (раздельно) vs elseif (слитно)

Пример

$day = 'Tue';
if ($day == 'Mon') {
    echo 'Понедельник';
} else if ($day == 'Tue') {
    echo 'Вторник';
} else {
    echo 'Другой день';
}
// Работает, но $else if$ - по сути вложенный if в блоке else
Вторник

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

Пример 6. Фильтрация массива с помощью if внутри цикла

Пример

$numbers = [1, -2, 3, -4, 5];
$positive = [];
foreach ($numbers as $num) {
    if ($num > 0) {
        $positive[] = $num;
    }
}
print_r($positive);
Array ( [0] => 1 [1] => 3 [2] => 5 )

Пояснение: классический пример фильтрации. Если бы нужна была обработка и положительных, и отрицательных, можно добавить else.

Условные операторы if-else в PHP - comments

En
Php условия (php)