为什么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

http://climg.mukewang.com/59676e7b0001b78901940163.jpg

在这段代码中 $faction的值为0

而 case $faction<=60 返回的是布尔类型 也就是true

之后呢 $faction<=60  => true 会和switch($faction)中的$faction进行比较

我们看一下 true 和 false转换成int类型为多少

http://climg.mukewang.com/596773b800010c5304140488.jpg

所以当进行比较的时候,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的值,返回结果也不一样


1

0 学习 · 2569 问题

查看课程