2013-10-23 115 views
1

我將不勝感激,如果有人可以給我解釋爲什麼下面的代碼...PHP:字符串真正的回報比較奇怪的結果

$result = true; 
if ($result == "discontinued"){ 
    echo "IN"; 
} 
if ($result == "invalid"){ 
    echo "IN2"; 
} 

同時觸發回聲(即ININ2。)......我知道我可以將操作符更改爲===,它可以工作,但我不明白髮生了什麼。謝謝

+1

因爲[this](http://php.net/manual/en/types.comparisons.php)和[this](http:// php。 net/manual/zh/language.types.type-juggling.php) –

+0

http://www.php.net/manual/en/types.comparisons.php –

+0

哈哈老式的雜耍xD ... btw。有[strval](http://php.net/manual/en/function.strval.php)從(鑄造)字符串中獲取值,也適用於將對象轉換爲字符串。 – timwebdev

回答

6

當使用比較(==)運算符時,任何無法轉換爲false的值都將計爲true。這包括任何非空字符串。這是因爲type juggling in PHP。所以"discontinued"評估爲真,因爲它不是一個空字符串。如果使用相同的運算符(===),則類型轉換沒有完成,因此"discontinued"被視爲文字字符串,然後您的語句將計算爲false。

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

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