下面的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;
}
?>
顺便说一下,它正在做同样的情况下"march"....?
$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)
阅读类型杂耍。显然,switch
使用了松散的比较:
注意:
注意,switch/case做松散比较。
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使用简单的==将变量的值与每个case的值进行比较。
你需要在数字周围加上引号。在使用switch语句时,不能混合数字和字符串。