今天,一個同學給出了這樣一段代碼,他說不好理解。
<?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