if-else та конструкція elseif. Тернарний оператор.while і do-while.for. Робота з ітераторами.Світ не лінійний. Сайти не можуть завжди працювати однаково (послідовно згори донизу). Керування потоком програми дозволяє застосункам бути “розумними” — приймати рішення в залежності від дій користувача. Якщо він адміністратор — показати панель керування продуктами, в іншому випадку (else) — просто показати кошик зі статтями. Якщо в кошику 100 товарів, нам не потрібно писати HTML код 100 разів; для цього (щоб вивести їх) створюються цикли.
if-else та elseifГоловний оператор розгалуження (branching) у всіх мовах. Він перевіряє вираз. Якщо вираз повертає true (істина), виконується перший блок інструкцій. Якщо false (хибність) — інтерпретатор перестрибує ці фігурні дужки { }.
if-elseif-else<?php
$userAge = 15;
if ($userAge >= 18) {
echo "Вам дозволено доступ. Показуємо каталог.";
} elseif ($userAge === 17) {
// Цей блок виконається ТІЛЬКИ якщо перша умова (>= 18) була false,
// і ми рівно 17 річні.
echo "Зачекайте ще один рік!";
} else {
// Всі інші варіанти (менше 17) "падають" сюди
echo "Вам заборонено доступ. Дивіться мультики.";
}
?>
Важливо: elseif можна додавати скільки завгодно. Блок else завжди розміщується тільки в кінці і є необов’язковим.
:)Коли програміст пише PHP-блок, який рендерить багатий на теги HTML контент, використовувати фігурні дужки { надзвичайно складно (вони губляться поміж <div>). PHP створив спеціальний запис для “шаблонів”: замість початку блоку ставиться двокрапка :, а в кінці — endif;.
<?php $isLogged = true; ?>
<?php if ($isLogged): ?>
<div class="user-block">
<h3>Привіт, Адмін!</h3>
</div>
<?php else: ?>
<a href="login.php">Будь ласка, увійдіть у систему</a>
<?php endif; ?>
Короткий (в 1 рядок) запис умовного оператора, коли вам просто потрібно призначити один із двох варіантів змінній.
Синтаксис: (Умова) ? [Якщо ТАК] : [Якщо НІ];
<?php
$score = 80;
// Звичайний if займає 5 рядків.
// Тернарний виглядає так:
$resultMsg = ($score >= 60) ? "Екзамен складено!" : "Ви не склали. Перездача.";
echo $resultMsg;
?>
Коли у вас є дуже багато варіантів (наприклад: що робити, якщо статус платежу ‘pending’, ‘paid’, ‘canceled’, ‘refunded’?), конструкція elseif стає надто громіздкою.
switch структураswitch приймає єдину змінну, і далі шукає совпадіння (case) серед різних варіантів:
<?php
$role = 'Moderator';
switch ($role) {
case 'Admin':
echo "Ви маєте всі права в системі.";
break; // Обов'язкова зупинка! Якщо забути, код поїде вниз по всіх case
case 'Moderator':
echo "Вам дозволено видаляти коментарі.";
break;
default:
// Це аналог 'else' (якщо нічого не підійшло з гори)
echo "Ви звичайний Гість.";
break;
}
?>
match вираз (Сучасний PHP 8.0+)PHP еволюціонує і додав структуру match. Вона робить те ж саме, що й switch, проте з 3-ма перевагами:
===).break;. Можна забути про помилки “випадкового провалу вниз”.$statusId = 3;
$statusMessage = match ($statusId) {
1 => 'Очікує оплати',
2 => 'В обробці',
3 => 'Успішно', // Код вибере цей варіант
default => 'Невідомий статус'
};
echo "Замовлення зараз: " . $statusMessage;
while і do-whileГоловне правило розробника: не копіюйте код вручну. Якщо треба вивести список з 20 коментарів, треба вказати комп’ютеру “Блоки ітерації”.
while (поки)Виконує блок інструкцій у тілі доти, доки умова всередині дужок залишається true. Якщо умова спочатку є false — цикл не виконається взагалі (жодного разу).
<?php
$batteryLevel = 5;
// Читати як: "ПОКИ батарея більша або рівна 1 відсотку..."
while ($batteryLevel >= 1) {
echo "Залишок: {$batteryLevel}% <br>";
$batteryLevel--; // Обов'язковий лічильник зменшення! (Декремент)
// Без нього цикл стане НЕСКІНЧЕННИМ, і сервер зависне ("закрашиться").
}
echo "Батарея розряджена!";
?>
do-whileЄдина відмінність від while — умова перевіряється не ПЕРЕД початком, а ПІСЛЯ завершення блоку. Це гарантує, що код виконається принаймні один раз, навіть якщо умова уже одразу false.
<?php
$x = 100;
do {
echo "Цей текст виведеться ГАРАНТОВАНО 1 раз, хоча 100 не менше 10.";
} while ($x < 10);
?>
for та управління ітераторамиНайулюбленіший цикл в алгоритміці. Він інкапсулює (“пакує”) всі три складові звичайного цикла (ініціалізацію лічильника, умову, крок інкременту) на одному зручному рядочку для розуміння.
Синтаксис: for (ПОЧАТОК; УМОВА ПРОДОВЖЕННЯ; КРОК НАПРИКІНЦІ) { ... }
<?php
// Виводимо квадрат числа від 1 до 10:
for ($i = 1; $i <= 10; $i++) {
// 1-ша ітерація: $i = 1
// 2-га ітерація: $i = 2 (після інкременту $i++)
echo "Квадрат числа $i дорівнює " . ($i * $i) . "<br>";
}
// Якщо нам треба рухатися у зворотньому напрямі через один елемент:
// for ($k = 100; $k > 0; $k -= 2)
?>
break і continueІноді треба втрутитися в логіку цикла “на льоту”.
break; (Зламати) — Негайно “розбиває” цикл взагалі назовсім. Усі наступні ітерації скасовуються, код іде далі. Зручно для дострокового припинення пошуку: “Ми знайшли потрібного користувача у базі на 5 тисяч записів. Перериваю пошук через break”.continue; (Пропустити) — Зупиняє ТІЛЬКИ ПОТОЧНУ ітерацію і стрибає до наступної “з чистого листа”.<?php
for ($i = 1; $i <= 10; $i++) {
if ($i === 5) {
// Ми не виведемо цифру 5 і перейдемо до 6-ї!
continue;
}
echo "Лічильник: $i <br>";
}
?>
if/else) формують інтелект програми, дозволяючи обробляти різні сценарії розвитку подій.match (в PHP 8) — елегантніший і строго типізований замінник старих конструкцій switch-case.while, for) — інструмент №1 для автоматизації рутини та реалізації принципу DRY. При їх написанні вкрай важливо слідкувати за ітератором ++ / --, аби не організувати “нескінченний (мертвий) цикл” (Infinite Loop).Match: https://www.php.net/manual/ru/control-structures.match.php:) під час виведення HTML-тегів є кращою практикою, ніж обгортання кожного HTML-тегу в великі фігурні скобки { echo "<div>"; }?if?match порівняно зі старими конструкціями switch-case? Який вид порівняння (строгий чи ні) застосовує match?for?break та continue? Наведіть приклади их використання під час ітерації.