match
(PHP 8)
Вираз match
призначено для розгалуження потоку виконання на підставі перевірки збігу значення із заданою умовою. Аналогічно оператору switch
, вираз match
приймає на вхід вираз, який порівнюється з безліччю альтернатив. Але, на відміну від switch
, воно обробляє значення у стилі, більше схожому на тернарний оператор. Також, на відміну від switch
, використовується суворе порівняння (===
), а не слабке (==
). Вираз match доступний починаючи з PHP 8.0.0.
Приклад #1 Структура виразу match
Loading...
Приклад #2 Простий приклад використання match
Loading...
Результат виконання наведеного прикладу:
string(35) "На столе стоит торт"
Зауваження: Результат
match
використовувати необов'язково.
Зауваження: Вираз
match
повинно завершуватися точкою з комою
Вираз match
похоже на операторswitch
за винятком деяких ключових відмінностей:
- На відміну від switch,
match
використовується суворе порівняння (===
- Вираз
match
повертає результат. - В
match
виконується лише одна, перша підійшла, гілка коду, тоді як уswitch
відбувається наскрізне виконання починаючи з умови, що підійшла, і до першого зустрівся оператораbreak
- Вираз
match
має бути вичерпним.
Так само як і оператор switch
match
послідовно проводить перевірки на збіг із заданими умовами. Виконання коду умов відбувається ліниво, тобто. код наступної умови виконується, тільки якщо всі попередні перевірки провалилися. Буде виконана тільки одна гілка коду, що відповідає умові, що підійшла. Приклад:
Loading...
Условия вmatch
можуть бути множинними. У цьому випадку їх слід розділяти комами. Численні умови працюють за принципом логічного АБО і, по суті, є скороченою формою для випадків, коли кілька умов мають бути оброблені ідентично.
Loading...
Також можна використовувати шаблон default
. Цей шаблон збігається з будь-чим, для чого не знайшлося збігів раніше. Наприклад:
Loading...
Зауваження: Використання декількох шаблонів default призведе до фатальної помилки
E_FATAL_ERROR
Вираз match
має бути вичерпним. Якщо вираз, що перевіряється, не співпав з жодною з умов, то буде викинуто виняток UnhandledMatchError
Приклад #3 Приклад необробленого виразу
Loading...
Результат виконання наведеного прикладу:
object(UnhandledMatchError)#1 (7) {
["message":protected]=>
string(33) "Unhandled match value of type int"
["string":"Error":private]=>
string(0) ""
["code":protected]=>
int(0)
["file":protected]=>
string(9) "/in/ICgGK"
["line":protected]=>
int(6)
["trace":"Error":private]=>
array(0) {
}
["previous":"Error":private]=>
NULL
}
Використання match для перевірки складних умов
Вираз match
можна використовувати не лише для перевірки ідентичності, але й для будь-яких виразів, що повертають логічне значення. В цьому випадку як вхідний параметр передається вираз true
Приклад #4 Використання match для розгалуження в залежності від входження в діапазони цілих чисел
Loading...
Результат виконання наведеного прикладу:
string(11) "совершеннолетний"
Приклад #5 Використання match для розгалуження залежно від вмісту рядка
Loading...
Результат виконання наведеного прикладу:
string(2) "fr"