4

可能重复:
相等(== 双等)和身份(=== 三等)比较运算符有何不同?

为什么这个

var_dump(0 == "string");

输出这个

bool(true)

运算符的上下文不==应该根据这套规则0转换成FALSE"string"成吗?TRUE

4

6 回答 6

13
var_dump(0 == "string");

正在进行数字(整数)比较

0 是整数,所以“字符串”被转换为整数进行比较,等于整数值 0,所以 0 == 0 为真

详见 PHP 文档中与各种类型表的比较

于 2012-12-20T10:55:25.227 回答
2

此处显示的表格更适合您的情况。

它显示TRUE用于与0比较"php"

在比较中,您不会将两个操作数都转换为布尔值,但会将一个操作数转换为与另一个操作数的类型匹配。在您的情况下,字符串被转换为整数,这导致另一个0. 这给了你0 == 0,结果为真。

于 2012-12-20T10:56:32.990 回答
1

它们不是同一类型,如果要检查它们是否也属于同一类型,请使用 ===。

于 2012-12-20T10:55:03.613 回答
1

php:==

如果将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都将转换为数字并以数字方式执行比较。

"string"不是数字格式,所以会转换成0.

于 2012-12-20T10:55:32.380 回答
1

在比较期间,字符串被转换为整数:

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

最后一行将自动转换为:

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

所以这个回报将返回:

int(0)
int(0)
bool(true)
bool(true)
于 2012-12-20T10:57:55.443 回答
-1

您首先在此站点上查找比较表:http: //php.net/manual/en/language.operators.comparison.php。转换为bool不适用于此处。

Operand 1           Operand 2
...
string, resource    string, resource    Translate strings and resources to numbers,
or number           or number           usual math

"string"强制转换等于0.

于 2012-12-20T10:56:31.067 回答