php弱類型比較

來源:互聯網
上載者:User
var_dump(0) //int(0)
var_dump('0') //string(1) "0"
var_dump('ssddsd') //string(7) "sasadad"
var_dump(0=='sdfsdf') // bool(true)
var_dump('0'=='sdfsf') //bool(false)

在上面這些比較中為什麼var_dump(0=='sdfsdf') // bool(true)而var_dump('0'=='sdfsf') //bool(false)
我認為的是0是整形,和字元型'sdfsf'比較應該是false。。。。

為什麼實際結果卻是相反的,我哪裡理解錯了嗎???

回複內容:

var_dump(0) //int(0)
var_dump('0') //string(1) "0"
var_dump('ssddsd') //string(7) "sasadad"
var_dump(0=='sdfsdf') // bool(true)
var_dump('0'=='sdfsf') //bool(false)

在上面這些比較中為什麼var_dump(0=='sdfsdf') // bool(true)而var_dump('0'=='sdfsf') //bool(false)
我認為的是0是整形,和字元型'sdfsf'比較應該是false。。。。

為什麼實際結果卻是相反的,我哪裡理解錯了嗎???

var_dump(0=='sdfsdf')

當處理這句時,不同類型比較'sdfsdf'會被強制轉換成int型,也就是int 0,所以結果是true

var_dump('0'=='sdfsf') 

當處理這句時,相同類型比較直接比較內容,內容不一樣,所以結果是false

你可以試試var_dump((int)("sdfsf"));結果是int 0

https://segmentfault.com/q/1010000000095573/a-1020000000098176

至於後面那個為啥錯誤的… 這個還需要說明麼… 判斷相等首要的因素是內容要相等,只是 == 非strict 模式會幫我們自動將兩者的類型轉換成一致的而已。字串內容都不同你到底是為啥會覺得相等的…

你理解錯了。
比較子直接的轉換 是:整數和字串比較,字串轉為整數,那麼字串sdfsdf就轉為整數0了,所以第三條是true。
第四條是true因為他們都是字串,所以就直接比較了,那麼字串0和sdfsf自然不等,為false

==比較只比較值,不同類型會轉換為同一類型比較。

要比較類型用===,必須值和類型都一樣才為true。

這些官方文檔裡都有寫的,請仔細閱讀文檔。

var_dump(0=='sdfsdf'); 弱類型比較通常會先進行類型轉換轉為相同類型在進行值相等判斷.
其中字串和數值的比較規則是字串轉換成數字. 所以上面那個比較實際的進行可看作

var_dump(0 == (int)'sdfsdf');

var_dump('0'=='sdfsf');兩個都是字串就是比較值是否相等.

字串和數字關鍵後會被轉換成0,這樣的現象在資料庫中也會存在的

http://php.net/manual/zh/language.operators.comparison.php
如果比較一個數字和字串或者比較涉及到數字內容的字串,
則字串會被轉換為數值並且比較按照數值來進行.此規則也適用於switch語句.
當用===或!==進行比較時則不進行類型轉換,因為此時類型和數值都要比對.

PHP中字串跟數字比較時,字串會被轉化為數字後進行比較,轉化過程類似intval():

echo intval('5stars');  輸出5print_r('5stars'==5);   輸出1var_dump('5stars'==5);  輸出bool(true)var_dump('5stars'===5); 輸出bool(false)var_dump('0e1'=='0e2');  輸出bool(true)var_dump('0e1'==='0e2'); 輸出bool(false)

PHP中比較字串應該用恒等於===或者strcmp.

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.