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"