我是PHP的新手,我只是遇到了一天浪費的錯誤,因爲我沒有意識到PHP ==操作符鍵入的強制類似於Javascript。在PHP中總是使用===安全嗎?
我知道道格拉斯克羅克福德建議永遠不要在Javascript中使用==操作符,並且要始終使用===操作符。
如果我以一種永不假定類型強制的方式進行編碼,我可以在PHP中使用相同的建議,並且從不使用==運算符嗎?是否安全總是使用===運算符,還是有我需要注意的陷阱?
我是PHP的新手,我只是遇到了一天浪費的錯誤,因爲我沒有意識到PHP ==操作符鍵入的強制類似於Javascript。在PHP中總是使用===安全嗎?
我知道道格拉斯克羅克福德建議永遠不要在Javascript中使用==操作符,並且要始終使用===操作符。
如果我以一種永不假定類型強制的方式進行編碼,我可以在PHP中使用相同的建議,並且從不使用==運算符嗎?是否安全總是使用===運算符,還是有我需要注意的陷阱?
默認情況下,您應該使用===
(以避免剛剛遇到的問題),並在需要時使用==
,以方便起見。
舉例來說,你可能是從$_GET
或類似服用參數,參數可能是字符串true
或false
,VS布爾true
或false
。就我個人而言,我會檢查所有內容,但如果您意識到這一點,並且謹慎使用==
,則可能存在合法使用案例。
==
和===
,由於特定原因而存在。正如您在文章中已經提到的那樣,==
確實會輸入強制。
我來自強類型編程背景,因此從不需要類型強制,就像你。在這種情況下,始終使用===
是安全的。
當然,當您確實需要強制時,請使用==
。
如果輸入無法控制(GET/POST參數,API響應),則可以使用==
或使用強制轉換。
var_dump('1' == 1);
返回bool(true)
和var_dump('1' === 1);
返回bool(false)
,因爲它們具有相同的值但類型不同。一個是字符串,另一個是int。
如果您知道所檢查的類型,則只能使用===
。
我已經寫了幾個CMS和PHP框架來完成PHP可以做的每種操作和數據轉換。由於他們解決了不同的問題,我仍然使用'=='和'==='。然而,在現實世界中'==='真的應該被用得比現在更多。 – Xeoncross
我不記得我最後一次使用鬆散的比較版本。 – goat