Полный цикл в digital

Конструкция match в PHP

Конструкция match это новая конструкция, введенная в PHP 8.0, предназначенная для улучшения читаемости и эргономики кода при сопоставлении значений. Она предоставляет более короткую и читаемую альтернативу switch и case, делая код более лаконичным и легко поддерживаемым.

Основные преимущества использования match:

  • Нет необходимости в break для прекращения выполнения кода в каждом блоке условий
  • Строгая типизация: не происходит неявных преобразований типов
  • Чтение кода становится проще и его объем уменьшается

Базовый пример:

$number = 1;
$result = match( $number )
{
    0 => 'ноль',
    1 => 'один',
    2 => 'два',
    default => 'нет совпадений'
};
// выведет один
echo $result;

Пример с множественными значениями:

$day = 'Суббота';
$result = match( $day )
{
    'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница' => 'Будний день',
    'Суббота', 'Воскресенье' => 'Выходной',
    default => 'Неизвестный день'
};
// выведет Выходной
echo $result;

Пример с использованием выражений:

$age = 25;
$category = match( true )
{
    $age >= 60 => 'Пожилой',
    $age >= 18 => 'Взрослый',
    default => 'Молодой'
};
// выведет "Взрослый"
echo $category;

Сравнение значений и типов

Стоит отметить важное отличие конструкции switch от match: switch сравнивает только значение, но не учитывает тип выражения. Тогда как match также учитывает тип сравниваемого выражения. Рассмотрим разницу на примере. Пусть есть следующая конструкция switch:

<?
switch (8.0) {
case "8.0":
$result = "строка";
break;
case 8.0:
$result = "число";
break;
}
echo $result; // строка

В конструкцию switch передается в качестве выажения число 8.0, но с точки зрения внутренней логики конструкции switch это выражение также соответствует строке "8.0". Поэтому в данном случае будет выполняться блок:

case "8.0":
$result = "строка";
break;

Теперь посмотрим, что будет в аналогичном примере с match:

match (8.0) {
"8.0" => $result = "строка",
8.0 => $result = "число"
};
echo $result; // число

Конструкция match также будет учитывать тип выражения, а тип в данном случае float, поэтому будет выполняься блок:

8.0 => $result = "число"
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг