您现在的位置是:首页 > PHP框架交流PHP框架交流

PHP8.0新特性(5) Match 表达式

上善若水2024-03-05 10:24:34【PHP框架交流】 609人已围观

简介熟悉PHP8.0的新特性,Match表达式match匹配比较严格,会验证类型和值,但大多数情况下,Match都可以替代,而且语法更加简洁!官方文档:https://www.php.net/manua

熟悉PHP8.0的新特性,Match 表达式match匹配比较严格,会验证类型和值,但大多数情况下,Match都可以替代,而且语法更加简洁!

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

新的 match 类似于 switch,并具有以下功能:

Match 是一个表达式,它可以储存到变量中亦可以直接返回。

Match 分支仅支持单行,它不需要一个 break; 语句。

Match 使用严格比较。

Match无法完全取代switch语句,但是可以替代switch语句的某些功能。

1.强类型比较,字符串数字和数字不相同。

switch (8.0) {
    case '8.0':
        $result = "Oh no!";
        break;
    case 8.0:
        $result = "This is what I expected";
        break;
}
echo $result, PHP_EOL;
//> Oh no!
echo match (8.0) {
    '8.0' => "Oh no!",
    8.0 => "This is what I expected",
};
//> This is what I expected

2.match 表达式分支可以通过逗号分隔,包含多个表达式。 这是一个逻辑 OR,当多个分支表达式右侧相同时,就可以用这种缩写。类似于短路, True || $a=false这个意思

$x = $a = $b = 1;
$result = match ($x) {
    // 匹配分支:
    1, 2, 3 => 5,
    // 等同于以下三个分支:
    ($a = 4) => 4,
    ($b = 5) => 5,
};
print_r(compact('a', 'b', 'x'));

打印结果

Array
(
    [a] => 1
    [b] => 1
    [x] => 1
)

$x = 5;$a = $b = 1;时候则打印结果
打印结果

Array
(
    [a] => 1
    [b] => 1
    [x] => 1
)

3.match 表达式必须详尽列出所有情况。 如果主体表达式不能被任意分支条件处理, 会抛出 UnhandledMatchError。
$x = $a = $b = 100;时候则打印结果:

Fatal error: Uncaught UnhandledMatchError: Unhandled match value of type int in D:\phpstudy_pro\WWW\testphp8_0\PHP8_0\match_expression.php on line 30

UnhandledMatchError: Unhandled match value of type int in D:\phpstudy_pro\WWW\testphp8_0\PHP8_0\match_expression.php on line 30

可以加入default ,与Switch的类似,这样就不会报错了。

$result = match ($x) {
    // 匹配分支:
    1, 2, 3 => 5,
    // 等同于以下三个分支:
    ($a = 4) => 4,
    ($b = 5) => 5,
    default => 998,
};

很赞哦! (0)

相关文章

文章评论

站点信息

  • 建站时间:2019-10-24
  • 网站程序:Thinkphp6 Layui
  • 文章统计247篇文章
  • 标签管理标签云
  • 统计数据cnzz统计
  • 微信公众号:扫描二维码,关注我们