php的==問題

    今天,一個同學給出了這樣一段代碼,他說不好理解。
    <?php
       var_dump("1" == "01");

       var_dump(0   == "a");

       switch("a"){

           case 0: 

                     echo 0;

           case "a":

                    echo "a";

      }

 

    輸出結果爲什麼是 true ,true,0

 

    我看了看,說把整個比較的過程調換下位置,變成下面這種形式。
    <?php
       var_dump("01" == "1");

       var_dump("a"  ==  0);

       switch("a"){

            case "a":

                    echo "a";

            case 0: 

                     echo 0;

      }

 

   結果是true, false,a

   對於
   var_dump(0   == "a");  輸出 true

   var_dump("a"  ==  0);  輸出 false

  
   我的理解是,由於php是弱變量類型,那麼在進行值相等匹配時,會根據第一個掃描到的數進行類型匹配,

   將兩個數的類型都轉爲之前掃描到的數的類型後進行比較。

    ※  "a"轉化爲整形之後爲 0

 

    對於  var_dump("1" == "01");

    和       var_dump("01" == "1");

     輸出結果都爲true.我理解爲編譯器在進行編譯時對代碼進行的優化,也就是採用了一個機制對其進行了處理。

     對於倆個字符串, 會首先判斷他們是否是數字字符串,如果都是數字字符串的話,會先把他們轉換爲數字類型

     再進行比較。

     如果覺得難以理解,網上搜到了一篇文章,希望有幫助.

     http://www.laruence.com/2009/02/21/662.html

  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章