4

在 PHP 中,

null==0
0=="0"

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

null=="0"

但是这是错误的。

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

4

3 回答 3

10

在第一种情况下:

null==0

null计算结果为,与计算结果false相同,所以两者都是,所以比较返回。0falsefalsetrue

在第二种情况下:

0=="0"

在这里,您正在比较两个不同类型的变量,一个是数字,另一个是字符串,因为您没有使用===运算符,PHP 将其中一个转换为另一种类型,因此0转换为字符串等于“0”,所以它们是同样,如果它是“0”,它被转换为数字也被转换为0,所以它与另一个值相同,所以这个比较返回 true。

第三种情况:

null=="0"

这是同样的情况,两者都是不同的类型,所以 PHP 将其中一个转换为另一个的类型,但是如果你将 null 转换为字符串,结果是"null"不等于"0",所以这就是原因不是确实那个比较。

于 2012-09-18T09:33:43.420 回答
2

==检查相等性

===检查相等类型(我们也说它是“相同的”)

因此,由于 PHP 没有强类型提示,它会自动转换为最适合的类型。

null === 0is falsewhilenull == 0为真,因为0or'0'被视为空值以及false. 空值null == ''也会返回true

这就是 PHP 的工作原理。

最佳实践是始终使用运算符检查类型===(及其负等效项,!==在特殊情况下仅使用另一个)。

于 2012-09-18T09:32:51.113 回答
1

您必须了解,因为 PHP 在其类型上并不严格,它通常会根据所需的比较或操作将您的变量转换为其他类型。在 null==0 的情况下,它告诉您 null 和整数 0 都被认为是错误的。

在 null == "0" 的情况下,它正在检查字符串 "0" 是否为空,而事实并非如此。将整数 0 与字符串“0”类型的情况“0”与 int 进行比较,在这种情况下它们是相等的。

希望有帮助。

于 2012-09-18T09:30:11.597 回答