2013-12-17 110 views
2

我對PHP中的truth有些困惑。爲什麼「someString」== 0在PHP中的計算結果爲true

我的理解是0評估爲false,並且非空字符串(除非字符串爲「0」)評估爲true。

這是因爲我希望:

var_dump((bool) 0);    // prints "boolean false" 
var_dump((bool) 'someString'); // prints "boolean true" 

但後來我感到驚訝以下結果:

var_dump((0=='someString'));  // prints "boolean true" 

我的問題是,爲什麼0=='someString'評估爲真?

+0

Nanne - 我瞭解這些運營商之間的區別。這是一個關於如何在不同類型的'=='比較中評估真/假的問題。不同的IMO。 –

+0

php是一種軟鍵入語言,它可以隨時轉換類型0可以是字符串也可以是整數,具體取決於它在哪裏使用而沒有更改 –

+1

標題中出現錯誤。「someString」== 0不計算爲true,因爲這是一個字符串比較,但0 ==「somestring」,因爲它是一個數字比較。 –

回答

7

使用比較(==)時,與另一個整數相比,運算符字符串將轉換爲整數。這是因爲type juggling in PHP。所以"someString"評估爲零,因爲它被轉換爲整數並且沒有前導數字。如果使用相同的運算符(===),則不會完成類型轉換,因此"someString"被視爲文字字符串,然後您的語句將計算爲false。

當執行類型雜耍時,以下將評估爲錯誤。其他將被評估爲真:

  • 「」(空字符串)
  • 0(0作爲整數)
  • 0.0(0爲float)
  • 「0」(0作爲字符串)
  • NULL
  • FALSE
  • 陣列()(空數組)
  • $變種; (聲明的變量,但沒有值)
+0

這是關於轉換爲整數,而不是布爾值。 – lonesomeday

+1

'=='確實轉換爲整數,這就是這個答案的重點。 – Nanne

+1

轉換爲整數是布爾結果的原因。 – dockeryZ

相關問題