<? phpukraine ДОКУМЕНТАЦІЯ
⌕Пошук по платформі
Документація українською

Переклад офіційної документації українською. Кожен розділ показує стан готовності: недоперекладене позначене відкрито, а не приховане.

МОВА · ПЕРЕКЛАДЕНО оновлено 1 жовтня 2026

match · PHP Manual

Вираз match розгалужує виконання на основі перевірки тотожності значення. Як і інструкція switch, вираз match має subject-вираз, який порівнюється з кількома альтернативами. На відміну від switch, він обчислюється у значення, подібно до тернарних виразів. На відміну від switch, порівняння виконується через перевірку тотожності (===), а не через слабку перевірку рівності (==). Вирази match доступні з PHP 8.0.0.

Приклад: структура виразу match

<?php
$return_value = match (subject_expression) {
    single_conditional_expression => return_expression,
    conditional_expression1, conditional_expression2 => return_expression,
};

Приклад: базове використання match

<?php
$food = 'cake';

$return_value = match ($food) {
    'apple' => 'This food is an apple',
    'bar' => 'This food is a bar',
    'cake' => 'This food is a cake',
};

var_dump($return_value);

Наведений вище приклад виведе:

string(19) "This food is a cake"

Приклад використання match з операторами порівняння

<?php
$age = 18;

$output = match (true) {
    $age < 2 => "Baby",
    $age < 13 => "Child",
    $age <= 19 => "Teenager",
    $age >= 40 => "Adult",
    $age > 19 => "Young adult",
};

var_dump($output);

Наведений вище приклад виведе:

string(8) "Teenager"

Результат виразу match не обовʼязково використовувати.

Коли вираз match використовується як самостійний вираз, він мусить завершуватися крапкою з комою ;.

Вираз match схожий на інструкцію switch, але має кілька ключових відмінностей:

  • Гілка match порівнює значення строго (===), а не нестрого, як це робить інструкція switch.
  • Вираз match повертає значення.
  • Гілки match не «провалюються» в наступні випадки так, як це роблять інструкції switch.
  • Вираз match має бути вичерпним.

Як і інструкції switch, вирази match виконуються гілка за гілкою. На початку не виконується жоден код. Умовні вирази обчислюються лише тоді, коли всі попередні умовні вирази не збіглися з subject-виразом. Обчислюється тільки той вираз повернення, який відповідає умовному виразу, що збігся. Наприклад:

<?php
$result = match ($x) {
    foo() => 'value',
    $this->bar() => 'value', // $this->bar() не викликається, якщо foo() === $x
    $this->baz => beep(), // beep() не викликається, поки $x !== $this->baz
    // тощо
};

Гілки виразу match можуть містити кілька виразів, розділених комою. Це логічне АБО і скорочений запис для кількох гілок match з однаковою правою частиною.

<?php
$result = match ($x) {
    // Ця гілка match:
    $a, $b, $c => 5,
    // Рівнозначна цим трьом гілкам match:
    $a => 5,
    $b => 5,
    $c => 5,
};

Окремий випадок - шаблон default. Цей шаблон збігається з усім, що не збіглося раніше. Наприклад:

<?php
$expressionResult = match ($condition) {
    1, 2 => foo(),
    3, 4 => bar(),
    default => baz(),
};

Кілька шаблонів default спричинять помилку E_FATAL_ERROR.

Вираз match має бути вичерпним. Якщо subject-вираз не обробляється жодною гілкою match, кидається UnhandledMatchError.

Приклад необробленого виразу match

<?php
$condition = 5;

try {
    match ($condition) {
        1, 2 => foo(),
        3, 4 => bar(),
    };
} catch (\UnhandledMatchError $e) {
    var_dump($e);
}

Наведений вище приклад виведе:

object(UnhandledMatchError)#1 (7) {
  ["message":protected]=>
  string(22) "Unhandled match case 5"
  ["string":"Error":private]=>
  string(0) ""
  ["code":protected]=>
  int(0)
  ["file":protected]=>
  string(6) "script"
  ["line":protected]=>
  int(5)
  ["trace":"Error":private]=>
  array(0) {
  }
  ["previous":"Error":private]=>
  NULL
}

Використання виразів match для перевірок, відмінних від тотожності

Вираз match можна використати для обробки умовних випадків, не пов'язаних із перевіркою тотожності, якщо взяти true як subject-вираз.

Використання узагальненого виразу match для розгалуження за діапазонами цілих чисел

<?php
$age = 23;

$result = match (true) {
    $age >= 65 => 'senior',
    $age >= 25 => 'adult',
    $age >= 18 => 'young adult',
    default => 'kid',
};

var_dump($result);

Наведений вище приклад виведе:

string(11) "young adult"

Використання узагальненого виразу match для розгалуження за вмістом рядка

<?php

$text = 'Bienvenue chez nous';

$result = match (true) {
    str_contains($text, 'Welcome'), str_contains($text, 'Hello') => 'en',
    str_contains($text, 'Bienvenue'), str_contains($text, 'Bonjour') => 'fr',
    // ...
};

var_dump($result);

Наведений вище приклад виведе:

string(2) "fr"
Стан перекладу

Перекладаємо з офіційної документації, розділ за розділом, і не ховаємо недоперекладене. Помітили неточність у терміні чи реченні: напишіть, виправимо.

48%
Готовності
1
У роботі
15
Ще не перекладено
Глосарій термінів