以下switch case语句应该执行case“january”的值:但是它正在执行case 0的值:是否有人可以告诉我它为什么这样做? 代码:
<?php
$a = "january";
switch ($a)
{
case 0:
case 3:
echo "The value is either 0 or 3";
break;
echo "0/2";
break;
case "january":
echo "january";
break;
case "march":
echo "The value is ";
break;
case 2:
echo "The value is 2";
break;
default:
echo "Here is ur default message";
break;
}
?>
顺便说一下,对于“游行”的情况也是如此....?
答案 0 :(得分:8)
$a = 'january';
var_dump($a == 0);
var_dump($a === 0);
var_dump($a == '0');
var_dump($a === '0');
输出:
bool(true)
bool(false)
bool(false)
bool(false)
阅读Type Juggling。 Apparently switch
使用loose comparison:
注意:强>
请注意,switch / case执行loose comparision。
答案 1 :(得分:1)
PHP存在一些可能导致此类行为的问题,在这种情况下,问题来自于您在Switch上使用不同类型的事实。
试试这段代码:
echo (0 == "january") ? "true\n" : "false\n"; // Echoes true
解决此问题的一种方法是在交换机上仅使用字符串,如下所示:
switch ($a)
{
case "0":
case "3":
echo "The value is either 0 or 3";
break;
echo "0/2";
break;
case "january":
echo "january";
break;
case "march":
echo "The value is ";
break;
case "2":
echo "The value is 2";
break;
default:
echo "Here is ur default message";
break;
}
这样可以正常工作,因为0 ==“0”但是“january”!=“0”
Switch使用simple ==将变量的值与每种情况下的值进行比较。
答案 2 :(得分:0)
您需要在数字周围加上引号。使用switch语句时,不能混合数字和字符串。