Перейти к основному содержимому

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

В PHP 8.0 появилось выражение match, близкий родственник switch. Есть три главных отличия: оно возвращает значение, сравнивает с помощью строгого сравнения (===) и не требует операторов break.

Простое выражение match

Значение $status определяет, какую строку вернёт match, и эта строка сохраняется в $text:

Prompt
Напишите PHP-скрипт, который присваивает переменной $status значение 1. С помощью выражения match присвойте строку переменной $text: 1 соответствует «На старт», 2 соответствует «Внимание», 3 соответствует «Марш». Выведите $text.
Вывод: PHP-скрипт

Ключевое слово default

Ветвь default перехватывает всё, что не перехватили другие ветви. Её стоит добавлять, потому что если ни одна ветвь не подошла, а default нет, PHP выбрасывает ошибку UnhandledMatchError.

match с default

Ни одна ветвь не охватывает значение 5, поэтому результат даёт ветвь default:

Prompt
Напишите PHP-скрипт, который присваивает переменной $status значение 5. Используйте выражение match с ветвью default. Случаи 1, 2, 3 соответствуют «На старт», «Внимание», «Марш». Ветвь default соответствует «Неизвестно». Выведите результат.
Вывод: PHP-скрипт

Несколько значений в одной ветви

Одна ветвь может охватывать несколько значений: перечислите их через запятую. Эта ветвь выбирается, если выражение совпадает с любым из них.

match с несколькими значениями

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

Prompt
Напишите PHP-скрипт, который присваивает переменной $day значение 2. Используйте выражение match, где дни 1 и 2 соответствуют «Начало рабочей недели», дни 3, 4 и 5 соответствуют «Середина/конец рабочей недели», а дни 6 и 7 соответствуют «Выходные». Выведите результат.
Вывод: PHP-скрипт

Строгое сравнение

Поскольку match сравнивает с помощью ===, у значения должны быть правильными и тип данных, и содержимое. Инструкция switch менее требовательна, поскольку сравнивает нестрого (==).

Строгое сравнение в match

Строка "1" при строгом сравнении не совпадает с целым числом 1, поэтому используется ветвь default:

Prompt
Напишите PHP-скрипт, который присваивает переменной $status значение "1" (строка). Используйте выражение match, где целое число 1 соответствует «Совпадение с целым числом». Добавьте ветвь default, которая соответствует «Нет совпадения». Выведите результат, чтобы показать, что match использует строгое сравнение.
Вывод: PHP-скрипт