Как использовать выражение соответствия вместо выражения переключения

Мы можем использовать выражение соответствия вместо case в PHP 8.

Как правильно написать выражение соответствия для следующего случая переключения?

switch($statusCode) {
  case 200:
  case 300:
    $message = null;
    break;
  case 400:
    $message = 'not found';
    break;
  case 500:
    $message = 'server error';
    break;
  default:
    $message = 'unknown status code';
    break;
}

1 ответ

Решение
$message = match($statusCode) {
  200, 300 => null,
  400 => 'not found',
  500 => 'server error',
  default => 'known status code',
};

Есть одна важная вещь, о которой нужно помнить match. Он чувствителен к типу, а не как switchзаявление. Таким образом, очень важно правильно привести переменную. В случае кодов HTTP часто они отправляются в строковом формате, например "400".

Когда мы не знаем об этом, это может доставить много боли во время отладки. Если $statusCodeбыла строкой, опция по умолчанию будет вызываться всегда. Моя измененная версия принятого ответа:

$message = match((int) $statusCode) {
  200, 300 => null,
  400 => 'not found',
  500 => 'server error',
  default => 'unknown status code',
};
Другие вопросы по тегам