刚刚发现一个奇怪的情况,我们只需要在相同的匹配(精确类型)上运行switch
语句。试想一下这个场景:
$value = "";
switch ($value) {
case 0:
echo "Zero";
break;
case 1:
echo "One";
break;
case "":
echo "Empty";
break;
default:
echo "None";
break;
}
这将echo
“归零”我希望echo
“清空”。这可以通过switch
语句以某种方式进行,或者我只能使用if...elseif...else
===
运算符吗?
答案 0 :(得分:4)
PHP的switch语句是documented to use loose comparison。如果您需要完全匹配,那么不幸的是,最好的办法是使用===
单独的if / else测试。
一种替代方案类似于
switch(true) {
case $value === 0:
//...
break;
}
但这与一系列if-else语句大致相同,但更多的输入和缩进。
答案 1 :(得分:4)
试试这个
$value = "";
switch (true) {
case ($value === 0):
echo "Zero";
break;
case ($value === 1):
echo "One";
break;
case ($value === ""):
echo "Empty";
break;
}
的 DEMO
强>
答案 2 :(得分:0)
可以做到,你只需要翻转你所比较的东西:
switch(true) {
case $value === 0:
echo "Zero";
break;
case $value === 1:
echo "One";
break;
case $value === "":
echo "Empty";
break;
default:
echo "None";
break;
}