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


checking if 0 is equal to any string always returns true

我在很多场合都遇到过这个php"错误",但我从未停下来研究它。所以这是我要求有人帮助我理解这一点:

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

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

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

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

从这篇文章

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

$int = 0;
var_dump($int === "string"); //false
var_dump(false === "string"); //false
var_dump(false === $int); //false
在 PHP 中,==

运算符检查两个值是否等效 - 换句话说,PHP 将在需要时使用类型杂耍,但像 0 == false、1 == '1' 等都是真的。

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