为什么整数0等于PHP中的字符串?

时间:2012-12-20 10:53:34

标签: php types casting type-conversion

  

可能重复:
  How do the equality (== double equals) and identity (=== triple equals) comparison operators differ?

为什么会这样

var_dump(0 == "string");

输出此

bool(true)

==运算符的上下文是不是应该根据this set of rules0转换为FALSE而将"string"转换为TRUE?< / p>

6 个答案:

答案 0 :(得分:13)

var_dump(0 == "string");

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

0是整数,所以&#34;字符串&#34;被转换为整数来进行比较,并等于整数值0,所以0 == 0为真

查看PHP文档中的comparison with various types table以获取详细信息

答案 1 :(得分:2)

table shown here更适合您的情况。

它显示TRUE,用于将0"php"进行比较。

在比较中,您不会将两个操作数都转换为布尔值,但会转换一个操作数以匹配另一个操作数的类型。在您的情况下,字符串将转换为整数,从而产生另一个0。这会给你0 == 0,产生真。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

PHP: ==

  

如果您将数字与字符串进行比较或比较涉及   数字字符串,然后每个字符串转换为一个数字和   比较用数字表示。

"string"不是数字格式,因此会转换为0

答案 4 :(得分: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)

答案 5 :(得分:-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