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('没有匹配到任何东西'); }