2014-09-26 77 views
0

這是最近開始發生的奇怪事情。PHP轉換(整數)返回字符串

function someFunction() { 
    return 0; 
} 
if (someFunction() == 0) 
    runCode(); 
elseif (someFunction() == '0') 
    runOtherCode(); 

在這種情況下runCode()不會被調用,而是runOtherCode()將被調用。爲什麼會發生這種情況?

編輯:使用===在某些情況下修復了此錯誤。但是另一次出現這個問題的時候是從數據庫返回整數結果。出於某種原因,將整數轉換爲字符串,但在返回數據之前向數據添加(int)可修復該錯誤。

+0

即使「someFunction」的結果被轉換爲字符串,這也沒有關係。您正在使用不檢查類型的'=='進行比較,因此'0'== 0'的計算結果爲true(''0'=== 0'但是不是)。 – fstanis 2014-09-27 00:04:03

+0

爲了讓我們更有幫助,可以在這裏發佈你的實際代碼。當然,除非這是你的實際代碼。 – Bono 2014-09-27 00:04:15

+1

別的地方有點不對勁,查看這個demo http://3v4l.org/tsDPj – 2014-09-27 00:12:31

回答

1

您需要使用嚴格比較來防止類型強制。基本上是這樣的:

if(someFunction() === 0) 
elseif(someFunction() === '0') 

3等號,而不是兩個調用一個嚴格比較,是字符串和整數比較來區分的唯一途徑。

編輯: 這也是相關的其他情況下,所以總是考慮它。

+1

在OP的問題中,使用寬鬆比較'== 0'仍然應該評估爲true。 – Bono 2014-09-27 00:04:48

+0

啊。哇。看起來這顯然是問題所在,因爲這樣的評估真的沒有意義嗎?我運行了他的代碼版本,它工作得很好。如果他沒有發佈確切的代碼,它仍然可能與嚴格的比較有關,但認爲這是一個等效的例子。 – 2014-09-27 00:06:54

+0

也是我最初的想法;)這就是爲什麼我要求OP提供他的實際代碼,因爲我覺得可能還有更多。 – Bono 2014-09-27 00:11:13