2012-01-30 87 views
5

我一直在閱讀關於類型雜耍和布爾值的PHP文檔,但我仍不明白爲什麼這個比較評估爲真。我的[不正確]理解告訴我,在下面的如果聲明中,整數0被認爲是FALSE而作爲非空字符串的「a」被認爲是真實。因此,我預計這個比較可以解析爲FALSE == TRUE最終,FALSE。我哪部分錯了?比較運算符 - 類型雜耍和布爾值

<?php 
      if(0 == "a"){ 
        $result = "TRUE"; 
      }else{ 
        $result = "FALSE"; 
      } 

      //$result == "TRUE" 
    ?> 

http://codepad.viper-7.com/EjxBF5

回答

9

當PHP確實字符串< =>整數比較,它試圖將字符串轉換爲數字以智能方式。假設是,如果你有一個字符串「42」,那麼你想比較值與另一個整數。當字符串不以數字開頭時,它的值爲零。

the docs

值由所述串的初始部分中給出。如果字符串以有效的數字數據開頭,則這將是使用的值。否則,該值將爲0(零)。

此行爲也在comparison docs(請看第一個示例中的第一行)中推斷。

+0

謝謝你回答我的問題並幫助我理解。 – IsisCode 2012-01-30 15:43:19

4

你的錯誤是假設operator ==在比較它們的每個操作數之前將其強制爲布爾值。它沒有這樣的事情。

會發生什麼情況是因爲您是comparing an integer to a string,字符串將轉換爲整數(在此例中爲"a" converts to 0),然後執行比較0 == 0

2

如果您使用嚴格比較===而不是==,它將起作用。嚴格的比較也檢查變量的類型,所以0 === 'a'將是錯誤的。