我是PHP新手,我只是遇到了浪费一天的错误,因为我没有意识到PHP ==运算符确实类似于Javascript类型强制。
我知道Douglas Crockford建议永远不要使用带有Javascript的==运算符,并始终使用===运算符。
如果我的编码方式从不假定类型强制,我可以在PHP中使用相同的建议,并且从不使用==运算符吗? 总是使用===运算符是安全的,还是我需要注意的问题?
答案 0 :(得分:7)
默认情况下,您应使用===
(以避免遇到的问题)并在需要时使用==
,以方便使用。
例如,您可能正在从$_GET
或类似参数中获取参数,参数可能是字符串true
或false
,而不是布尔值true
或{{ 1}}。就个人而言,我会检查所有内容,但如果您意识到这一点,false
可能存在合法用例,并且谨慎使用。
答案 1 :(得分:4)
==
和===
因特定原因而存在。正如您在帖子中提到的那样,==
会输入强制。
我来自一个强类型的编程背景,因此从不需要类型强制,就像你一样。在这种情况下,始终使用===
安全。
当然,当您确实需要强制时,请使用==
。
如果输入您无法控制(GET / POST参数,API响应),您可以使用==
或使用强制转换。
答案 2 :(得分:0)
var_dump('1' == 1);
返回bool(true)
和var_dump('1' === 1);
返回bool(false)
,因为它们具有相同的值但不同的类型。一个是字符串,另一个是int。
如果您知道要检查的类型,请仅使用===
。