如何使用匹配表达式代替开关表达式

Ali*_*_Hr 9 php php-8

在 PHP 8 中我们可以使用匹配表达式来代替 switch case。

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

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;
}
Run Code Online (Sandbox Code Playgroud)

Jso*_*owa 14

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

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

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