检查0是否等于任何字符串始终返回true

时间:2016-02-11 13:31:37

标签: php

我在许多事件中遇到过这个php“错误”,但我从来没有停止过关于它的事情。所以这是我要求有人帮助我理解这一点:

$int = 0;
var_dump($int == "string");
var_dump(false == "string");
var_dump(false == $int);

3 个答案:

答案 0 :(得分:2)

我们使用==进行松散比较,使用===进行严格比较。

$int = 0;
var_dump($int === "string"); //false
var_dump(false === "string"); //false
var_dump(false === $int); //false

答案 1 :(得分:2)

PHP手册中有一个Comparison Table类型,它可以让您了解在比较两种不同数据类型的变量时会发生什么。

你的第一个例子('松散'比较,因为它也不检查两个操作数的数据类型)隐式地将左边的字符串转换为整数。由于它不以数字开头,因此字符串将转换为整数0,它等于整数0。

您的第二个示例不仅会比较值,还会比较类型。由于类型不同,因此比较为假。

From this post

答案 2 :(得分:0)

在PHP中,==运算符检查两个值是否相等 - 换句话说,PHP将在需要时使用类型juggling,但是0 == false,1 =='1'等等都将为真。

要检查两个值是否相同(包括类型),请使用===运算符。