首页 > 解决方案 > 如何使用匹配表达式而不是 switch 表达式

问题描述

我们可以在 PHP 8 中使用 match 表达式而不是 switch case。

如何为以下 switch 案例正确编写匹配表达式?

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;
}

标签: phpphp-8

解决方案


有一件重要的事情必须记住match。它是类型敏感的,而不是作为switch声明。因此,正确地转换变量非常重要。在 HTTP 代码的情况下,它通常以字符串格式发送,例如"400".

当我们不知道它时,它可能会在调试过程中带来很多痛苦。如果$statusCode是字符串,则始终调用默认选项。我接受的答案的修改版本:

$message = match((int) $statusCode) {
  200, 300 => null,
  400 => 'not found',
  500 => 'server error',
  default => 'unknown status code',
};

推荐阅读