<?php
$a = 0;
switch ($a) {
case $a <= 10:
echo '小于10';
break;
case $a <= 20:
echo '小于20';
break;
case $a <= 30:
echo '小于30';
break;
default:
echo '大于30';
break;
}
本来以为输出结果是
小于10
实际输出是
大于30
再看下面这段代码
<?php
$a = 0;
switch ($a) {
case $a <= 10:
echo '小于10';
break;
case $a > 20:
echo '大于20';
break;
default:
echo '大于30';
break;
}
输出结果
大于20
我们结合两个例子来解释,第一个例子是$a=0
,$a<=10
是满足的所以该表达式的值是true
,然后判断0==true吗?不是,继续下一个case一直到最后一个case都不相等,所以就走default。
第二个例子是$a=0
,$a<=10
是满足的所以代码会判断0==true吗?不是,继续下一个case,$a>20
不满足所以是false
然后0==false
故输出’大于20’。
注意 switch/case 作的是松散比较。
例子一的代码可以这样写
<?php
$a = 0;
switch (true) {
case $a <= 10:
echo '小于10';
break;
case $a <= 20:
echo '小于20';
break;
case $a <= 30:
echo '小于30';
break;
default:
echo '大于30';
break;
}