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

苏南大叔的“程序如此灵动”技术博客,记录苏南大叔的代码感想感悟。本文测试环境:win10,nginx@1.15.11,php@8.2.10-nts。
switch语句对比match语句
switch语句是if else语句的改进,match是switch语句的改进。
$sn_str = "sunan大叔";
switch ($sn_str){
case "苏南大叔":
$sn_int = 999;
break;
default:
$sn_int = 666;
}
var_dump($sn_int);
上下两个语句,实际效果上是等同的。
$sn_str = "sunan大叔";
$sn_int2 = match($sn_str) {
"苏南大叔" => 999,
default => 666
};
var_dump($sn_int2);
区别一:match(){}后面必须使用分号
值得注意的是:match(){};的最后有个分号,否则报错。而同时的swtich(){}后面则不用带分号。所以,match(){}语句的进化是有缺陷的。
可能会得到下面的错误提示信息:
Parse error: syntax error, unexpected end of file 
区别二: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);
特例:强制类型转换
这里的例子,就是针对整形和字符串型的变量,进行转化。例如:
$number = '1';
$result = match((int)$number) {
1 => 'one',
2 => 'two',
3, 4 => 'three or four',
};
echo $result;
相关文章
- https://newsn.net/say/php8-function.html
- https://newsn.net/say/php8-class.html
- https://newsn.net/say/php8-null-check.html
结束语
更多php经验文章,请点击苏南大叔的博客文章: