我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

继续描述php8所带来的新语言特性match(){}语句,这个match语句就是针对原来的switch()语句而做的改进。苏南大叔试用之后,感觉确实比switch(){}好用的多,值得推荐。当然,事先说明一下,只是部分情况下,两者可以相互替换。根据官方的说法,match(){};是个表达式。

苏南大叔:php8新特性,如何理解可以代替switch语句的match表达式? - match语句
php8新特性,如何理解可以代替switch语句的match表达式?(图6-1)

苏南大叔的“程序如此灵动”技术博客,记录苏南大叔的代码感想感悟。本文测试环境:win10nginx@1.15.11php@8.2.10-nts

switch语句对比match语句

switch语句是if else语句的改进,matchswitch语句的改进。

$sn_str = "sunan大叔";
switch ($sn_str){
    case "苏南大叔":
        $sn_int = 999;
        break;
    default:
        $sn_int = 666;
}
var_dump($sn_int);

苏南大叔:php8新特性,如何理解可以代替switch语句的match表达式? - switch语句
php8新特性,如何理解可以代替switch语句的match表达式?(图6-2)

上下两个语句,实际效果上是等同的。

$sn_str = "sunan大叔";
$sn_int2 = match($sn_str) {
    "苏南大叔" => 999,
    default => 666
};
var_dump($sn_int2);

苏南大叔:php8新特性,如何理解可以代替switch语句的match表达式? - match语句
php8新特性,如何理解可以代替switch语句的match表达式?(图6-3)

区别一:match(){}后面必须使用分号

值得注意的是:match(){};的最后有个分号,否则报错。而同时的swtich(){}后面则不用带分号。所以,match(){}语句的进化是有缺陷的。

可能会得到下面的错误提示信息:

Parse error: syntax error, unexpected end of file 

苏南大叔:php8新特性,如何理解可以代替switch语句的match表达式? - match分号
php8新特性,如何理解可以代替switch语句的match表达式?(图6-4)

区别二:swtich(){}里面分支可以做计算

match(){}仅仅是个赋值语句,虽然看起来很像是个带分支计算的,里面无法执行任何分支计算的。如果要走分支计算,还是要老老实实的使用switch(){}

$sn_int = 99;
$sn_str = "sunan大叔";
switch ($sn_str){
    case "苏南大叔":
        $sn_int += 1;
        break;
    default:
        $sn_int += 3;
}
var_dump($sn_int);

苏南大叔:php8新特性,如何理解可以代替switch语句的match表达式? - switch语句分支计算
php8新特性,如何理解可以代替switch语句的match表达式?(图6-5)

特例:强制类型转换

这里的例子,就是针对整形和字符串型的变量,进行转化。例如:

$number = '1';
$result = match((int)$number) {
    1 => 'one',
    2 => 'two',
    3, 4 => 'three or four',
};
echo $result;

苏南大叔:php8新特性,如何理解可以代替switch语句的match表达式? - 强制类型转换
php8新特性,如何理解可以代替switch语句的match表达式?(图6-6)

相关文章

结束语

更多php经验文章,请点击苏南大叔的博客文章:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php