2011-05-09 88 views
12

我敢肯定,這是我福利局PHP知識,簡單的根本缺陷,但我很驚訝,當以下事情發生了:字符串比較上一個布爾

enter image description here

$resultTRUE ...所以爲什麼它被認爲與字符串「email」相等?我猜這是因爲,從技術上講,這是一個bool,它不是假的?所以當它與一個字符串(例如「email」)進行比較時,它會返回true。

我應該改變我的方法返回結果爲string包含「真」(而不是成功return true;),或者有另一種方式,我應該這樣做嗎?

謝謝。

+1

請粘貼您的代碼而不是截圖。 – TJHeuvel 2011-05-09 14:24:55

+2

@TJ,我發佈截圖的原因是因爲它顯示了'$ result'的內容,並且它通過了條件測試。再加上它實際上是三行代碼。 – 2011-05-09 14:26:39

+0

啊!它不是我的代碼違背編程規律,它只是PHP! – 2014-12-11 13:09:32

回答

14

是的,true等於(==)爲非空字符串。不完全相同(===)。

我建議你仔細閱讀type comparison table

+0

優秀。非常感謝。 – 2011-05-09 14:29:19

+0

+1提醒身份 – 2011-05-09 14:30:52

+0

不完全正確!空字符串(「」)和字符串零(「0」)被視爲FALSE。所有其他人都是真的! – 2012-11-16 04:57:31

1

if($result === "email")會做的伎倆,但個人我永遠不會這樣。

+0

你會建議什麼方式? – 2011-05-09 14:28:47

+0

爲什麼你永遠不會那樣? – meze 2011-05-09 14:29:23

+0

個人我會去2個變量。一個用於有效結果,另一個用於先前定義的錯誤。提高了代碼的可讀性,但我認爲它純粹是一種個人編碼風格。應該留下這個註釋。 – DanielB 2011-05-09 14:35:20

3

它返回true,因爲php會嘗試轉換某些東西來比較它們。在這種情況下,它可能會嘗試將右側的字符串轉換爲布爾值,在這種情況下將爲true。真實的==真實是正確的。

通過執行$ result ===「email」(triple =),告訴PHP它不應該執行轉換,並且如果類型不匹配應該返回false。