PHP混淆中的比较运算符“==”

时间:2012-09-18 09:22:23

标签: php

在PHP中,

null==0
0=="0"

如果你将这两者结合起来,你会期望:

null=="0"

但事实并非如此。

有人可以向我解释一下吗?

3 个答案:

答案 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 === 0falsenull == 0为真,因为0'0'被视为空值以及false。空值null == ''也将返回true

这就是PHP的工作原理。

最佳做法是始终使用===运算符检查类型(及其负等效值!==,并在特殊情况下仅使用其他运算符)。

答案 2 :(得分:1)

你必须明白,因为PHP的输入并不严格,所以通常会根据所需的比较或操作将变量转换为其他类型。在null == 0的情况下,它告诉您null和整数0都被视为false。

在null ==“0”的情况下,它检查字符串“0”是否为空,而不是。将整数0与字符串“0”进行比较将类型为“0”的情况与“int”进行比较以进行比较,在这种情况下它们是相等的。

希望有所帮助。