1. Головна
  2. Колонка автора
  3. Умови та розгалуження в PHP

Умови та розгалуження в PHP

Без розгалуження неможливо створити сучасну програму, оскільки в залежності від виконання умов розгалуження виконується той чи інший набір виразів. Розберемо оператори та конструкції, за допомогою яких можна здійснювати операції розгалуження.
Умови та розгалуження в PHP

Умовний оператор If

Умовний оператор If має наступний синтаксис:
if (Умова) Оператор1 else Оператор2
Умова, як аргумент, приймає логічну змінну або вираз, що повертає логічне значення. Якщо воно є істинним, то виконується Оператор1, інакше виконується Оператор2.
Змінну типу Boolean, що приймає лише два значення True та False (або 1 та 0), часто називають прапором. Причому прапор вважається встановленим, якщо змінна набуває значення True, і скинутим, якщо змінна набуває значення False.
<?php
$flag = true; // Істина
if ($flag) {
echo '<p>Умова істинна</p>';
} else {
echo '<p>Умова хибна</p>';
}
Оператор If перевіряє умову $flag, і якщо її значення True, виконується код у фігурних дужках, наступний за If, і якщо False - код після ключового слова Else. Якщо блок Else не потрібний, його можна опустити.

Фігурні дужки в Оператор1 та Оператор2 необов’язкові, якщо необхідно виконати лише один оператор. Однак стандарт кодування PSR наполегливо рекомендує використовувати оператор If з фігурними дужками.

Перевірка додаткових умов також можлива за допомогою оператора Elseif:
if (Умова) Оператор1 elseif Оператор2 else Оператор3
Можна включати скільки завгодно блоків Elseif, але ключове слово Else в кожному If може бути тільки в одному екземплярі та визначає, що потрібно робити, якщо жодні інші умови не є істинними.
<?php
$digit = 2;
if ($digit == 1) {
echo "Число $digit";
} elseif ($digit == 2) {
echo "Число $digit";
} else {
echo "Інше число";
}
РНР надає можливість альтернативного синтаксису умовного оператора - без фігурних дужок. У цьому випадку оператори If, Else та Elseif закінчуються двокрапкою, а сама конструкція If завершується обов’язковим ключовим словом Endif. Однак, використання альтернативного синтаксису в сучасній розробці не заохочується і забороняється безпосередньо стандартом кодування PSR.
<?php
$digit = 3;
if ($digit == 1) :
echo "Число $digit";
elseif ($digit == 2) :
echo "Число $digit";
else :
echo "Інше число";
endif;

Логічні оператори

Найчастіше у програмуванні потрібно використовувати кілька умов, об’єднаних логічними операторами, які оперують змінними логічного типу.

&& - Логічне «І», повертає True, якщо обидва операнди рівні True, в іншому випадку повертається False.

AND - Логічне «І», що відрізняється від оператора && меншим пріоритетом.

|| - Логічне «АБО», повертає True, якщо хоча б один з операндів, дорівнює True;

OR - Логічне «АБО», що відрізняється від оператора || меншим пріоритетом.

!$х - Повертає або True, якщо дорівнює False, або False, якщо дорівнює True.

Оператори && та || мають альтернативу у вигляді операторів AND і OR, які володіють нижчим пріоритетом. Тобто, якщо в арифметичних операціях спочатку виконується множення та ділення і лише потім додавання та віднімання, то в логічних операторах спочатку виконуються && та || і лише потім AND та OR.

Якщо перший операнд дорівнює True у логічних операторах || або OR, то в обчисленні другого операнда відсутня потреба - незалежно від того, дорівнюватиме True чи False, логічний вираз однаково прийме значення True.

Розберемо приклад з оператором АБО та рівності =:
$content = file_get_contents('https://mysite.com') OR exit('Помилка');
echo $content;
Функція Exit зупиняє роботу скрипта та виводить у вікно браузера повідомлення, передане їй як параметр. Функція File_get_contents читає вміст файлу, у тому числі через мережу.
У цьому прикладі спочатку виконується умова з оператором присвоєння "рівно" =, а потім операція OR. В результаті буде виведено на екран сторінку сайту.

Але якщо використовувати оператор ||, який має пріоритет вищий ніж оператор =, тоді спочатку перевіряється умова АБО, а потім логічне значення True (при успішному file_get_contents) надається змінній.

Намагайтеся уникати перевірок на основі операторів || та OR. Натомість краще використовувати оператор If, тоді скрипти виходять нехай і дещо об’ємнішими, зате більш читабельними.

Умовний оператор х ? у : z

У PHP існує ще одна можливість заміни оператора If, яка називається тернарним оператором:
Вираз1 ? Вираз2 : Вираз3
Якщо Вираз1 істинний, то обчислюється значення Вираз2, яке і стає результатом, інакше як результат отримаємо Вираз3. Класичним прикладом умовної операції є набуття абсолютного значення змінної:
<?php
$x = -10;
$x = $x < 0 ? -$x : $x;
echo $x; // 10
Якщо змінна виявляється меншою за нуль - у неї змінюється знак, інакше вона повертається без змін. Основне призначення умовного оператора – скоротити конструкцію If до одного рядка, якщо це не призводить до зниження читабельності.

Оператор ??

Спеціальний оператор ??, який введений в РНР 7, дозволяє проініціалізувати змінну тільки в тому випадку, якщо змінна не була раніше проініціалізована або їй надано значення Null:
<?php
$a = null;
$b = 'str';
$a = $a ?? 5; // 5
$b = $b ?? 5; // str
Якщо змінна раніше не існувала, вона буде створена, а як значення їй надається другий операнд. Якщо ж змінна існує, її значення залишиться незмінним.

Перемикач Switch

Перемикач Switch призначений для організації множинного вибору та має наступний синтаксис:
switch(вираз)
{
case значення1:
оператори;
break;
case значення2:
оператори;
break;
default:
оператори;
}
Керуюча структура Switch передає управління тому з помічених операторів Case, для якого значення константного виразу збігається зі значенням виразу перемикача.

Спочатку аналізується вираз перемикання і здійснюється перехід до тієї гілки програми, де його значення збігається з виразом в операторі Case. Далі будуть виконуватись оператори або групи операторів доти, доки не зустрінеться ключове слово Break, яким позначається вихід із конструкції Switch.

Якщо значення перемикаючого виразу не збігається з жодним з константних виразів, то виконується перехід до оператора, позначеного позначкою Default. У кожному перемикачі може бути не більше однієї позначки Default. Ключові слова Break та Default можна опускати, оскільки вони не є обов’язковими.

У наступному прикладі залежно від того, яке значення набуває змінна $color, у вікно браузера виводиться та чи інша фраза. Якщо змінна $color набуває значення «red», виводиться фраза «Колір червоний», якщо змінна набуває значення «yellow», виводиться фраза «Колір жовтий». Якщо $color набуває іншого значення, керування передається блоку Default і виводиться фраза «Інший колір».
<?php
$color = 'yellow';
switch($color)
{
case 'red':
echo 'Колір червоний';
break;
case 'yellow':
echo 'Колір жовтий';
break;
default:
echo 'Інший колір';
}
Оператори в блоці Case можуть бути поміщені в необов’язкові фігурні дужки. Якщо пропущений оператор Break, то скрипт виконує оператори наступного блоку, доки не закінчиться Switch або не зустрінеться Break. Якщо змінити попередній приклад і видалити Break, то результатом буде рядок: «Колір жовтий Інший колір».

РНР дозволяє використовувати альтернативний синтаксис без фігурних дужок із застосуванням ключових слів switch: та endswitch:
<?php
$color = 'yellow';
switch($color):
case 'red':
echo 'Колір червоний';
break;
case 'yellow':
echo 'Колір жовтий';
break;
default:
echo 'Інший колір';
endswitch;
Оператор Switch дозволяє створювати логічний вираз, що порівнюється зі значенням True або False. Наприклад:
<?php
switch(true):
case (5 < 2):
echo 'П’ять менше двох';
break;
case (5 > 2):
echo 'П’ять більше двох';
break;
endswitch;

Оператор Goto

Оператор Goto дозволяє здійснювати безумовний перехід на мітку, назва якої вказується як єдиний аргумент.
Goto мітка;
...
мітка:
Наведемо приклад організації циклу з допомогою двох операторів Goto.
<?php
$i = 0;
begin:
$i++;
echo $i;
if ($i >= 10) goto finish;
goto begin;
finish:
Інтерпретатор, доходячи до інструкції goto begin, переміщається до мітки begin, таким чином досягається зациклювання програми. Для виходу з програми використовується if-умова, при спрацьовуванні якої виконується інструкція goto finish, що повідомляє інтерпретатор про необхідність перейти до мітки finish.

#самовчитель_php
Редакція «КовельPost» може не поділяти думку блогерів або дописувачів. За зміст публікацій і їх достовірність відповідальність несуть автори.

Коментарі

Читайте також

Оператори в PHP

Оператори в PHP
Розглянемо рядкові, арифметичні та оператори порівняння, пріоритет виконання операторів та об’єднання рядків.

Константи в PHP

Константи в PHP
Опишемо процес оголошення констант, перевірку їх існування, розберемо зумовлені константи, абсолютний та відносний шляхи до файлу та константи класу.

Підписуйтесь на наш канал у Telegram! 🚀

@kovelpost