switch 语句中的相同匹配(带类型检查)PHP
Identical match (with type checking) in switch statement PHP
刚刚发现一个奇怪的情况,我们需要运行 switch
语句只在相同的匹配(精确类型)。想想这个场景:
$value = "";
switch ($value) {
case 0:
echo "Zero";
break;
case 1:
echo "One";
break;
case "":
echo "Empty";
break;
default:
echo "None";
break;
}
这将 echo
"Zero" 我想要的 echo
"Empty".这是否可以通过 switch
语句以某种方式完成,或者我只有将 if...elseif...else
与 ===
运算符一起使用的唯一方法?
PHP的switch语句是documented to use loose comparison。如果您需要完全匹配,那么不幸的是,最好的办法是使用单独的 if/else 测试和 ===
.
一个替代方案类似于
switch(true) {
case $value === 0:
//...
break;
}
但这与一系列 if-else 语句大致相同,只是打字和缩进更多。
这样试试
$value = "";
switch (true) {
case ($value === 0):
echo "Zero";
break;
case ($value === 1):
echo "One";
break;
case ($value === ""):
echo "Empty";
break;
}
可以做到,你只需要翻转你比较的内容即可:
switch(true) {
case $value === 0:
echo "Zero";
break;
case $value === 1:
echo "One";
break;
case $value === "":
echo "Empty";
break;
default:
echo "None";
break;
}
刚刚发现一个奇怪的情况,我们需要运行 switch
语句只在相同的匹配(精确类型)。想想这个场景:
$value = "";
switch ($value) {
case 0:
echo "Zero";
break;
case 1:
echo "One";
break;
case "":
echo "Empty";
break;
default:
echo "None";
break;
}
这将 echo
"Zero" 我想要的 echo
"Empty".这是否可以通过 switch
语句以某种方式完成,或者我只有将 if...elseif...else
与 ===
运算符一起使用的唯一方法?
PHP的switch语句是documented to use loose comparison。如果您需要完全匹配,那么不幸的是,最好的办法是使用单独的 if/else 测试和 ===
.
一个替代方案类似于
switch(true) {
case $value === 0:
//...
break;
}
但这与一系列 if-else 语句大致相同,只是打字和缩进更多。
这样试试
$value = "";
switch (true) {
case ($value === 0):
echo "Zero";
break;
case ($value === 1):
echo "One";
break;
case ($value === ""):
echo "Empty";
break;
}
可以做到,你只需要翻转你比较的内容即可:
switch(true) {
case $value === 0:
echo "Zero";
break;
case $value === 1:
echo "One";
break;
case $value === "":
echo "Empty";
break;
default:
echo "None";
break;
}