
PHP8 alpha2发布了,最近引入了一个新的关键字:match, 这个关键字的作用跟switch有点类似。
这个我觉得还是有点意思,match这个词也挺好看,那么它是干啥的呢?
在以前我们可能会经常使用switch做值转换类的工作,类似:
function convert($input) {
switch ($input) {
case "true":
$result = 1;
break;
case "false":
$result = 0;
break;
case "null":
$result = NULL;
break;
}
return $result;
}那么如果使用match关键字呢,可以变成类似:
function converti($input) {
return match($input) {
"true" => 1,
"false" => 0,
"null" => NULL,
};
}相比switch, match会直接返回值,不再需要上面switch例子中的$result中间变量。
并且,类似switch的多个case一个block一样,match的多个条件也可以写在一起,比如:
return match($input) {
"true", "on" => 1,
"false", "off" => 0,
"null", "empty", "NaN" => NULL,
};需要注意的和switch不太一样的是,以前我们用switch可能会经常遇到这种诡异的问题:
$input = "2 person";
switch ($input) {
case 2:
echo "bad";
break;
}你会发现,bad竟然被输出了,这是因为switch使用了宽松比较(==)。match就不会有这个问题了, 它使用的是严格比较(===),就是值和类型都要完全相等。
还有就是,当input并不能被match中的所有条件满足的时候,match会抛出一个UnhandledMatchError exception:
function convert($input) {
return match($input) {
"true" => 1,
};
}
convert("false");会得到:
Fatal error: Uncaught UnhandledMatchError: Unhandled match value of type string
这样就不用担心万一match条件没写全导致了不可预知的错误。
推荐教程:《PHP8》
Atas ialah kandungan terperinci PHP8 新特性 match 表达式详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
Bagaimana untuk membuka fail php
Bagaimana untuk mengalih keluar beberapa elemen pertama tatasusunan dalam php
Apa yang perlu dilakukan jika penyahserialisasian php gagal
Bagaimana untuk menyambungkan php ke pangkalan data mssql
Bagaimana untuk menyambung php ke pangkalan data mssql
Bagaimana untuk memuat naik html
Bagaimana untuk menyelesaikan aksara bercelaru dalam PHP
Bagaimana untuk membuka fail php pada telefon bimbit