switch
(PHP 4, PHP 5, PHP 7, PHP 8)
Операторswitch
схожий на низку операторів IF з однаковою умовою. У багатьох випадках вам може знадобитися порівнювати ту саму змінну (або вираз) з безліччю різних значень і виконувати різні ділянки коду в залежності від того, яке значення набуває ця змінна (або вираз). Це саме той випадок, для якого зручний оператор switch
Зауваження: Зверніть увагу, що на відміну від деяких інших мов, оператор continue застосовується у конструкціях
switch
і діє подібно до оператораbreak
. Якщо у вас конструкціяswitch
знаходиться всередині циклу, і вам необхідно перейти до наступної ітерації циклу, використовуйтеcontinue 2
Зауваження :
Зауважте, що конструкція switch/case використовує не суворе порівняння (==)
У наступному прикладі кожен блок коду еквівалентний. В одному використовується серія операторів if
иelseif
, а в іншому - оператор switch
. У кожному випадку результат той самий.
Приклад #1 Оператор switch
Loading...
Приклад #2 Оператор switch
допускає порівняння з типом string
Loading...
Важливо зрозуміти, як оператор switch
виконується, щоб уникнути помилок. Оператор switch
виконує рядок за рядком (насправді вираз за виразом). Спочатку ніякий код не виконується. Тільки у разі знаходження оператора case
значення якого збігається зі значенням виразу в операторі switch
, PHP починає виконувати оператори. PHP продовжує виконувати оператори до кінця блоку switch
або доти, доки не зустріне оператор break
. Якщо ви не напишете оператор break
наприкінці секції case, PHP продовжуватиме виконувати команди наступної секції case. Наприклад:
Loading...
У цьому прикладі, якщо $i дорівнює 0, PHP виконає всі оператори echo! Якщо $i дорівнює 1, PHP виконає два останні оператори echo. Ви отримаєте очікувану поведінку оператора ('i дорівнює 2' буде відображено) тільки, якщо $i дорівнюватиме 2. Таким чином, важливо не забувати про операторів break
(навіть якщо ви, можливо, хочете уникнути його використання за призначенням за певних обставин).
В операторі switch
вираз обчислюється один раз і цей результат порівнюється з кожним оператором case
. У виразі elseif
, вираз обчислюється знову. Якщо ваша умова складніша, ніж просте порівняння та/або знаходиться в циклі, конструкція switch
може працювати швидше.
Список операторів для виконання у секції case також може бути порожнім, що просто передає керування списку операторів у наступній секції case.
Loading...
Спеціальний вид конструкції case - default
. Сюди керування потрапляє тоді, коли не спрацював жоден з інших операторів case. Наприклад:
Loading...
Зауваження: Декілька вказівок default викликають помилку
E_COMPILE_ERROR
Зауваження: Формально конструкція
default
може бути перерахована будь-де. Вона використовуватиметься лише в тому випадку, якщо жоден інший варіант не підходить. Однак, за згодою, найкраще помістити її в кінець, як останню конструкцію.
Якщо жодна конструкція case
не збігається і немає конструкції default
, то код не буде виконано, якби жодне твердження if
не було справжнім.
Значення case може бути задано у вигляді виразу. Однак цей вираз буде оцінений сам собою, а потім слабко зіставлений зі значенням switch. Це означає, що його не можна використовувати для складних оцінок значення switch. Наприклад:
Loading...
Для більш складних порівнянь як значення switch може використовуватися значення true
. Або, як варіант, замість switch
використовувати блоки if
-else
Loading...
Можливий альтернативний синтаксис для керуючої структури switch. Для більш детальної інформації дивіться Альтернативний синтаксис для керуючих структур
Loading...
Можливе використання точки з комою замість двокрапки після оператора case. Наприклад :
Loading...