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
经验文章,请点击苏南大叔的博客文章:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。