在PHP中,
null==0
0=="0"
如果你将这两者结合起来,你会期望:
null=="0"
但事实并非如此。
有人可以向我解释一下吗?
答案 0 :(得分:10)
在第一种情况下:
null==0
null
评估为false
,与评估为0
的{{1}}相同,因此两者均为false
,因此比较返回false
在第二种情况下:
true
这里你要比较两个不同类型的变量,一个是数字和其他字符串,因为你没有使用===运算符,PHP将其中一个转换为另一个类型,所以 0 转换为字符串等于“0”,因此它们是相同的,如果它是“0”,它被转换为数字也转换为 0 所以它与其他值相同,所以这个比较返回true。
第三种情况:
0=="0"
这里是相同的情况,两者都是不同的类型,所以PHP将其中一个投射到另一个类型,但如果你将null转换为字符串,结果是“null”,这不等于“0”,所以这就是比较的原因。
答案 1 :(得分:2)
==
检查相等性
===
检查等式 AND 类型(我们还说它是“相同的”)
因此,由于PHP没有强类型提示,因此它会自动转换为最适合的类型。
null === 0
为false
而null == 0
为真,因为0
或'0'
被视为空值以及false
。空值null == ''
也将返回true
。
这就是PHP的工作原理。
最佳做法是始终使用===
运算符检查类型(及其负等效值!==
,并在特殊情况下仅使用其他运算符)。
答案 2 :(得分:1)
你必须明白,因为PHP的输入并不严格,所以通常会根据所需的比较或操作将变量转换为其他类型。在null == 0的情况下,它告诉您null和整数0都被视为false。
在null ==“0”的情况下,它检查字符串“0”是否为空,而不是。将整数0与字符串“0”进行比较将类型为“0”的情况与“int”进行比较以进行比较,在这种情况下它们是相等的。
希望有所帮助。