2013-10-31 52 views
-1

誰能弄清楚爲什麼會在PHP中發生(現在用V5.4):在PHP中奇怪的邏輯行爲 - 這是正常的嗎?

$value = 0; 
$existing_value = "Unknown"; 

if ($value == $existing_value) { 
    echo "$value == $existing_value"; 
} else { 
    echo "$value != $existing_value"; 
} 

此輸出作爲0 == Unknown

有趣的是,$value = "0"(即設置爲一個字符串),計算結果爲假

這是一個已知的行爲?我在文檔中遺漏了什麼?調試這個讓我在今天早些時候瘋狂!

感謝您的幫助提前...

+1

我認爲這是因爲你將它作爲字符串回顯。這不是'假' – putvande

回答

4

這是通過自動類型轉換造成的,PHP使用。

將int值與只使用==的字符串進行比較時,字符串將被轉換爲int值,在您的情況下,結果爲0,因此得出true評估值。

欲瞭解更多信息,請參閱相應PHP documentation

爲了避免這種情況,您可以使用===而不是==。前者包括類型檢查,這將使你的條件評估爲假:

$value = 0; 
$existing_value = "Unknown"; 

if ($value === $existing_value) { 
    echo "$value === $existing_value"; 
} else { 
    echo "$value !== $existing_value"; 
} 
+0

謝謝你。因爲我在函數中使用這段代碼來確定現有值應該在下拉列表中被預先選定,我認爲我的首選選項是將兩個部分轉換爲字符串並執行測試'if(strval($ value) == strval($ existing_value))'我正確的說,無論使用它,它都會有一致的結果嗎? – user2761030

+0

@ user2761030我認爲一致的編碼和使用'==='會是更好的選擇,但是我認爲字符串轉換應該也可以。 – Sirko

+0

事情是,這是一個活的網站,我不確定整個網站的所有值都會通過(來自數據庫/用戶輸入等)作爲正確的變量類型(stings,boolean等),所以'==='可能導致其他地方出現不同的意外行爲... – user2761030

0

當您比較了一些在PHP中的字符串,你在這裏做,將字符串轉換爲數字。由於字符串「未知」不是數字,因此將其轉換爲數字0

如果您檢查與===運算符是否相等,它將不會執行類型轉換,它會評估爲false。

http://php.net/manual/en/language.operators.comparison.php

0

你應該看看comparison tables in PHP尤其是比較寬鬆相比,嚴格的比較(使用==)款(使用===)部分。

enter image description here

+0

截圖可能是一個好主意。現在你發佈的表格只是令人困惑 – ThiefMaster

+0

@ThiefMaster謝謝,總是認爲該網站需要我將我自己的圖像託管在某個服務器上,這總是會有太多工作要做。我今天學了些新東西 :) – Fluffeh