2017-04-03 37 views
-1

爲什麼執行以下PHP代碼塊?PHP - 「1ebc0b7ef6141d11989f78748555751721187266c1dd4ece76fec267e5cb1aaf」== 1是真

if ("1ebc0b7ef6141d11989f78748555751721187266c1dd4ece76fec267e5cb1aaf" == 1) { 
    echo "WTF!"; 
} 

這大概意味着"1ebc0b7ef6141d11989f78748555751721187266c1dd4ece76fec267e5cb1aaf" == 1是真的?

對於那些聲明一個字符串總是計算爲真的人,爲什麼下面的代碼塊不能執行?

if ("111987266c1d" == 1) { 
    echo "WTF, again!"; 
} 
+1

*「這大概意味着...... == 1是真的?」* - 是的。 –

+0

堅持下來,讓我組成一個'wtf.php'測試文件;-) brb。編輯:哦,你刪除了我回應的評論。 –

+0

'(「111987266c1d」!= 1)== true' – Daan

回答

3

當PHP字符串比較爲int,將字符串轉換爲int,這在字符串的開頭只需要數字,結束其中字母開始。我跑通過我鼓搗了幾個測試例子:

[1] > "1ebc0b7ef6141d11989f78748555751721187266c1dd4ece76fec267e5cb1aaf" == 1; 
// true 
[2] > "1ebc0b7ef6141d11989f78748555751721187266c1dd4ece76fec267e5cb1aaf" == '1'; 
// false 
[3] > "1ebc0b7ef6141d11989f78748555751721187266c1dd4ece76fec267e5cb1aaf" == 2; 
// false 
[4] > "2ebc0b7ef6141d11989f78748555751721187266c1dd4ece76fec267e5cb1aaf" == 2; 
// true 
[5] > "2ebc0b7ef6141d11989f78748555751721187266c1dd4ece76fec267e5cb1aaf" == 3; 
// false 
[6] > "2ebc0b7ef6141d11989f78748555751721187266c1dd4ece76fec267e5cb1aaf" == 1; 
// false 
[7] > "10ebc0b7ef6141d11989f78748555751721187266c1dd4ece76fec267e5cb1aaf" == 1; 
// false 
[9] > "111987266c1d" == 1; 
// false 

這進一步由documentation備份:

如果你比較了一些用細繩或比較涉及數字字符串,然後每串被轉換爲一個數字,並進行數值比較。

+0

這很有道理。所以我的第二個例子是不正確的,因爲開始的數字實際上是111987266,而'(111987266 == 1)== false'。謝謝。 – ryansin

+1

這是我正在追求的解釋;-)正確的錢 –

+1

一個奇怪的(但有效的)問題的絕佳答案.. –