如何使用匹配表达式而不是开关表达式

9

在 PHP 8 中,我们可以使用匹配表达式(match expression)代替 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;
}

1
你有看过这篇文章吗:https://stitcher.io/blog/php-8-match-or-switch? - AbsoluteBeginner
2
@AbsoluteBeginner确实,他使用那篇博客文章来创建并回答自己的问题,很可能是为了提高他的SO分数。 - pimarc
1个回答

14

match有一个非常重要的事情需要记住,它是类型敏感的,不像switch语句。因此,正确地将变量强制转换非常重要。在HTTP状态码的情况下,通常以字符串格式发送,例如"400"

如果$statusCode是一个字符串,在调试过程中我们不知道这一点时,可能会带来很多痛苦。默认情况下始终会调用默认选项。下面是我修改后的被接受答案:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接