在 PHP 中,
null==0
0=="0"
如果将这两者结合起来,您会期望:
null=="0"
但是这是错误的。
有人可以向我解释一下吗?
在第一种情况下:
null==0
null
计算结果为,与计算结果false
相同,所以两者都是,所以比较返回。0
false
false
true
在第二种情况下:
0=="0"
在这里,您正在比较两个不同类型的变量,一个是数字,另一个是字符串,因为您没有使用===运算符,PHP 将其中一个转换为另一种类型,因此0转换为字符串等于“0”,所以它们是同样,如果它是“0”,它被转换为数字也被转换为0,所以它与另一个值相同,所以这个比较返回 true。
第三种情况:
null=="0"
这是同样的情况,两者都是不同的类型,所以 PHP 将其中一个转换为另一个的类型,但是如果你将 null 转换为字符串,结果是"null"不等于"0",所以这就是原因不是确实那个比较。
==
检查相等性
===
检查相等和类型(我们也说它是“相同的”)
因此,由于 PHP 没有强类型提示,它会自动转换为最适合的类型。
null === 0
is false
whilenull == 0
为真,因为0
or'0'
被视为空值以及false
. 空值null == ''
也会返回true
。
这就是 PHP 的工作原理。
最佳实践是始终使用运算符检查类型===
(及其负等效项,!==
在特殊情况下仅使用另一个)。
您必须了解,因为 PHP 在其类型上并不严格,它通常会根据所需的比较或操作将您的变量转换为其他类型。在 null==0 的情况下,它告诉您 null 和整数 0 都被认为是错误的。
在 null == "0" 的情况下,它正在检查字符串 "0" 是否为空,而事实并非如此。将整数 0 与字符串“0”类型的情况“0”与 int 进行比较,在这种情况下它们是相等的。
希望有帮助。