B中num=2执行case2,为什么会执行后面的。num又没有累加上去 条件不成立啊
在B例子中,执行了第二个case , $sum变为20,由于没有break,继续执行第三个case,然后又执行default,$sum变为了40。进了循环后,没有跳出来的关键字,它就会自动走完这个循环再出来。
break的作用是阻止进行,题主已经知道了。
之所以执行完case2后,还会执行case3,是因为他是按顺序依次进行运算的,
在没有break的情况下,只要在某一个位置满足了条件,这个位置以下的条件都会无效,不管条件对不对,都会运算下去。
$num = 2; $sum = 10; switch($num){ case 1: $sum = $sum + 10;//不满足条件,跳过此次运算。 case 2: $sum = $sum + 10;//在此处case 2满足了条件,下面的运算都会进行,不管条件对不对。 case 3: $sum = $sum + 10;//因前面case 2的时候已经满足了条件,符合了判断,故此处依然执行 default: $sum = $sum + 10;//到default结束运算。 }
理清了上面顺序和原因之后,
再来看下,输出结果是40,这个40是怎来的?
初始变量$sum = 10;
在case 2:的时候 $sum = $sum +10;
这时$sum=20,因为没有了break,故将此结果带入继续进行下面运算;
在case 3:$sum = $sum +10;
此时$sum=20+10 =30;
在default:$sum = $sum+10; //即$sum = 30 +10;
故结果为40
需要在每个case最后加入break;已停止向下执行。如果不加break,在满足条件的case后面的程序都会执行。
因为B中的switch语句中没有加break,他会从头到尾一个一个的输出