前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php8新特性 - match表达式

php8新特性 - match表达式

作者头像
MoLeft
发布2022-08-30 11:04:06
2670
发布2022-08-30 11:04:06
举报
文章被收录于专栏:用砖头敲代码

switch...case...

在php8以前我们可能会写类似于下面的代码,通过switch来做值的转换

代码语言:javascript
复制
switch ($input) {
    case "true":
        $result = 1;
    break;
    case "false":
        $result = 0;
    break;
    case "null":
        $result = NULL;
    break;
}

match

在php8中新增了match表达式,大大减少了我们的工作量

代码语言:javascript
复制
$result = match($input) {
    "true" => 1,
    "false" => 0,
    "null" => NULL,
};

很明显的对比,相比switchmatch会直接返回值,可以直接赋值给$result了。 并且,类似switch的多个case一个block一样,match的多个条件也可以写在一起,比如:

代码语言:javascript
复制
$result = match($input) {
    "true", "on" => 1,
    "false", "off" => 0,
    "null", "empty", "NaN" => NULL,
};

需要注意的和switch不太一样的是,以前我们用switch可能会经常遇到这种诡异的问题:

代码语言:javascript
复制
$input = "2 person";
switch ($input) {
    case 2:
        echo "bad";
    break;
}

你会发现,bad竟然被输出了,这是因为switch使用了宽松比较(==)。match就不会有这个问题了, 它使用的是严格比较(===),就是值和类型都要完全相等。 还有就是,当input并不能被match中的所有条件满足的时候,match会抛出一个UnhandledMatchError exception:

代码语言:javascript
复制
$input = "false";
$result = match($input) {
        "true" => 1,
};

会得到:

代码语言:javascript
复制
Fatal error: Uncaught UnhandledMatchError: Unhandled match value of type string

这样就不用担心万一match条件没写全导致了不可预知的错误。 另外还是要说明,match是关键字,也就是从PHP8开始它不能出现在namespace或者类名中,如果你的项目中有用match作为类名的:

代码语言:javascript
复制
class Match {}

在PHP8开始将会得到语法错误了, 当然,方法名中还是可以用的。

结尾

参考RFC:Match Expression (最后一句:php yyds!!!)

如无特殊说明《php8新特性 - match表达式》为博主MoLeft原创,转载请注明原文链接为:https://moleft.cn/post-213.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • switch...case...
  • match
  • 结尾
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档