0Pricing
PHP Academy · Урок

Инструкции switch и match

Используйте switch и match из PHP 8 для логики с несколькими ветвями.

«Инструкции switch и match» — бесплатный урок PHP Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.

Switch и цепочки if

Если у Вас много ветвей, зависящих от значения одной переменной, switch выглядит понятнее длинной цепочки if/elseif.

В PHP 8 появился match — современная строгая альтернатива.

Основы оператора switch

Оператор switch один раз вычисляет выражение и выполняет блок подходящего варианта:

<?php
$day = 'Monday';

switch ($day) {
    case 'Monday':
        echo 'Start of work week';
        break;
    case 'Friday':
        echo 'Almost weekend';
        break;
    default:
        echo 'Midweek';
}

Поведение с проваливанием

Без break выполнение проваливается в следующий вариант — это удобный приём для намеренного объединения вариантов:

<?php
$status = 2;

switch ($status) {
    case 1:
    case 2:
    case 3:
        echo 'In progress';  // runs for 1, 2, or 3
        break;
    case 4:
        echo 'Done';
        break;
}

Switch использует нестрогое сравнение

Switch внутри использует == (нестрогое сравнение) — это может приводить к неожиданным совпадениям:

<?php
$val = 0;

switch ($val) {
    case 'foo':   // 0 == 'foo' in PHP 7!
        echo 'match foo';
        break;
    case 0:
        echo 'match zero';  // PHP 8 fixes this
        break;
}
// PHP 8: match zero (fixed)
// PHP 7: match foo (bug!)

Выражение match в PHP 8

match похож на switch, но использует строгое сравнение, возвращает значение и не требует break:

<?php
$status = 'active';

$label = match($status) {
    'active'   => 'Currently active',
    'inactive' => 'Not active',
    'pending'  => 'Awaiting activation',
    default    => 'Unknown status',
};

echo $label; // Currently active

match без совпадения вызывает исключение

Если в match не совпал ни один вариант и нет default, возникает исключение UnhandledMatchError:

<?php
$code = 99;

try {
    $result = match($code) {
        200 => 'OK',
        404 => 'Not Found',
        500 => 'Server Error',
        // no default!
    };
} catch (\UnhandledMatchError $e) {
    echo 'Unhandled match value: ' . $code;
}

match с несколькими условиями

Один вариант match может содержать несколько значений, разделённых запятыми:

<?php
$lang = 'tr';

$region = match($lang) {
    'en', 'en-US', 'en-GB' => 'English',
    'tr', 'az'             => 'Turkic',
    'fr', 'be', 'ca'       => 'French-speaking',
    default                => 'Other',
};

echo $region; // Turkic

match со сложными выражениями

В правой части вариантов match можно использовать произвольные выражения:

<?php
$score = 85;

$grade = match(true) {
    $score >= 90 => 'A',
    $score >= 80 => 'B',  // matches
    $score >= 70 => 'C',
    default      => 'F',
};

echo $grade; // B

Возврат из match

Поскольку match является выражением, его можно использовать везде, где ожидается значение:

<?php
function getHttpMessage(int $code): string {
    return match($code) {
        200 => 'OK',
        201 => 'Created',
        400 => 'Bad Request',
        401 => 'Unauthorized',
        404 => 'Not Found',
        default => 'Unknown',
    };
}

echo getHttpMessage(404); // Not Found

switch в контексте возврата

switch можно использовать внутри функции для возврата разных значений, но match выглядит понятнее:

<?php
function describe(int $n): string {
    switch (true) {
        case $n < 0:  return 'negative';
        case $n === 0: return 'zero';
        default:       return 'positive';
    }
}

echo describe(-5);  // negative
echo describe(0);   // zero
echo describe(7);   // positive

Когда использовать switch, а когда match

Рекомендации по выбору:

  • Используйте match, когда нужны строгое сравнение и возвращаемое значение (PHP 8+)
  • Используйте switch для группировки с проваливанием или при поддержке PHP 7
  • Оба варианта понятнее длинных цепочек if/elseif при ветвлении по нескольким значениям

Быстрая проверка

Что происходит в выражении match, если ни один вариант не совпал и значение по умолчанию не задано?

Повторение: switch и match

Основные различия:

  • switch — нестрогое сравнение, проваливание, PHP 4+
  • match — строгое сравнение, без проваливания, возвращает значение, PHP 8+
  • При отсутствии значения по умолчанию match вызывает UnhandledMatchError
  • Варианты match принимают несколько значений, разделённых запятыми

Далее: циклы for и while.

Часто задаваемые вопросы

Урок «Инструкции switch и match» бесплатный?

Да — полный текст урока «Инструкции switch и match» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.

Чему я научусь в уроке «Инструкции switch и match»?

Используйте switch и match из PHP 8 для логики с несколькими ветвями. Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать PHP Academy?

Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Инструкции switch и match»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке PHP Academy?

Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. if, elseif и else
  2. Инструкции switch и match
  3. Циклы for и while
  4. foreach и управление циклами
← Назад к PHP Academy