在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';
}
代碼執行的結果如下:
再來看另外一段代碼
$b = 0;
switch( $b ) {
case empty($b):
echo '$b是as';
break;
case "fs":
echo '$b是fs';
break;
default :
echo '這是個美麗的錯誤';
}
輸入結果如下:
為什么會有這樣的差異呢?
這是因為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,否則所有的代碼都會被執行.就不存在判斷的意義了.