为什么switch 当等于0时判断不对
来源:1-12 switch...case语句的应用
NewNingMeng
2017-07-13 20:23:19
$faction="0";
switch ($faction) {
case $faction<=60:
echo "不及格";
break;
case $faction>=61 && $faction<70:
echo "及格";
break;
case $faction>=70 && $faction<80:
echo "良好";
break;
case $faction>=80 && $faction<90:
echo "优秀";
break;
case $faction>=90 && $faction<=100:
echo "天才";
break;
default:
echo "你输入的分数错误";
break;
}
1回答
相聚又别离
2017-07-13
在这段代码中 $faction的值为0
而 case $faction<=60 返回的是布尔类型 也就是true
之后呢 $faction<=60 => true 会和switch($faction)中的$faction进行比较
我们看一下 true 和 false转换成int类型为多少
所以当进行比较的时候,switch($faction)也就变成了
switch(0 == true ?) => switch( 0 ==1 ? ) =>返回的是false,所以不成立
break;
继续执行下一段代码
case $faction>=61 && $faction<70:
echo "及格";
break;
在这里呢
$faction = 0 那么 0>=61吗?
所以返回为false
再次传入我们的switch语句中去
switch($faction)也就变成了
switch( 0 == flase ?) => switch( 0 == 0 ?) 返回为true
成立 echo '及格';
你的这段代码的最后结果
及格
你只需要将代码改写为
$faction="0";
switch (true) {
case $faction<=60:
echo "不及格";
break;
case $faction>=61 && $faction<70:
echo "及格";
break;
case $faction>=70 && $faction<80:
echo "良好";
break;
case $faction>=80 && $faction<90:
echo "优秀";
break;
case $faction>=90 && $faction<=100:
echo "天才";
break;
default:
echo "你输入的分数错误";
break;
}
返回的为不及格了
同理,修改$faction的值,返回结果也不一样
相似问题