比較php中switch與if..elseif以及記錄switch中的坑


在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,否則所有的代碼都會被執行.就不存在判斷的意義了.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM