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...

Дивіться також