可能重复:
How do the equality (== double equals) and identity (=== triple equals) comparison operators differ?
为什么会这样
var_dump(0 == "string");
输出此
bool(true)
==
运算符的上下文是不是应该根据this set of rules将0
转换为FALSE
而将"string"
转换为TRUE
?< / p>
答案 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)
答案 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
。