在php中做条件判断,常用的是if和switch语句,虽然都能完成条件判断的任务,但是两者之间还是有不同的,请看代码:

$b = 0;

if( $b>=0 ){

echo ‘$b>=0’;

}elseif( $b>=10 ) {

echo ‘$b>=10’;

}else {

echo ‘$b =0’;

}

$b = 0;

switch($b) {

case $b>=0:

echo ‘$b>=0’;

break;

case $b>=10:

echo ‘$b>=10’;

break;

default:

echo ‘$b = 0’;

}

代码执行的结果如下:

f24896b33e5211fda3599c5bb546a506.png 再来看另外一段代码

$b = 0;

switch( $b ) {

case empty($b):

echo ‘$b是as’;

break;

case “fs”:

echo ‘$b是fs’;

break;

default :

echo ‘这是个美丽的错误’;

}

输入结果如下:

21f7ed67d9981c41f0b15500b4566721.png

为什么会有这样的差异呢?

这是因为switch在执行的时候,如果是用不同类型的参数进行比较,会把case 条件以及参数进行类型转换,转成布尔类型,再进行下一步的比较, 比如$b=0为false, case里的$b>=10先将$b=0的值传入,然

后跟10比较为false,这样以来$b=0为false,而case里的$b>=10也为false,最后结果就是$b>=10.第二段代码中的$b=0为false,”fs”会被intval转换为false,因此得到了上面我们看到的结果.

有了这个差异在这里,是不是我们尽量别用switch了?其实不然,如果简单的常量比较,使用switch不仅代码结构清晰,而且效率也比if语句高,这一点跟底层算法有关.

另外在使用switch的时候一定记得break,否则所有的代码都会被执行.就不存在判断的意义了.