php-8新特性之 Match表达式

首页 / php / 正文

php-8新特性之 Match表达式

match 表达式基于值的一致性进行分支计算。 match表达式和 switch 语句类似, 都有一个表达式主体,可以和多个可选项进行比较。 与 switch不同点是,它会像三元表达式一样求值。 与 switch 另一个不同点,它的比较是严格比较( ===)而不是松散比较(==)。 Match 表达式从 PHP 8.0.0 起可用。

简单例子

先看php7的写法

$type = 7.0;

switch ($type) {
    case '7.0';
        $str = '这是7.0';
        break;
    case 7.0:
        $str = 'php7.0';
        break;

    default:
        $str = '1';
}

echo $str; // 输出:这是7.0
注意:case ‘7.0’case 7.0 两个语句谁在前边就匹配到谁,非严格模式

php8 新增的match

echo match(8.0) {
    '8.0' => '这是8.0',
    8.0 => '8080'
};
// 输出: 8080
match使用严格比较

match表达式的特性

  • Match是一个表达式
  • Match分支仅支持单行,并且不需要一个break语句
  • match使用严格比较
  • Match表达式必须使用分号;结尾

match与switch的区别

  • match比较分支值,受用了严格比较(===),而switch语句使用了松散比较
  • match表达式直接返回了一个值
  • match分支不会像switch语句一样,没有匹配是自动执行下一个case
  • match必须彻底列举所有情况

match 语句需要注意的点

  • Match 表达式必须列出所有情况,如果主体表达式不能被任何一个分支条件处理的时候,会抛出UnhandledMatchError异常

    try {
        echo match(9.0) {
            '8.0' => '这是8.0',
            8.0 => '8080'
        };
    } catch (\UnhandledMatchError $e) {
        var_dump('没有匹配到任何东西');
    }
打赏
评论区
头像