PHP: использование if else и альтернативные способы ветвления
Условные операторы 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.