PHP运算符==(排序相等)和整数0


php operator == (sort of equality) and the integer 0

php,我最亲爱的老朋友。

好了,所以我可以理解为什么字符串'0'是一个假值。这是公平的,因为'0'在松散类型语言中与0相同,0在松散类型语言中与false相同。因此,false == 0 == '0'

好细……但是! !这是怎么回事?

<?php
    print "number of surprised persons: " . ('false' == 0);

输出为....

number of surprised persons: 1

这怎么合理?我是唯一对此感到惊讶的人吗?我漏掉了什么?

进一步的测试证明了整数0等于(通过运算符==)

0        <-- integer
false    <-- boolean
null     <-- just.. you know, null
'0'      <-- string
''       <-- string
'false'  <-- string
'true'   <-- string
'null'   <-- string
当然,我主要使用运算符===来比较内容。既然我知道了这一点,我就必须调整我的程序当然,这是毫无疑问的。但仍!有谁能给我点光吗?

这是因为,当您比较字符串和整数时,它们不会同时转换为字符串或布尔值-它们会转换为整数。对于PHP,当您考虑它时,这一点也不奇怪(相对而言,我认为)。

'true' == 0
// is the same as
(int)'true' == 0
// is the same as
0 == 0
// is the same as
true

对于任何非数字字符串以及字符串"0"都是如此。输出1的原因是true的字符串版本是1 (false的字符串版本是一个空字符串)。

只要您关心输出:

('false' == 0) = boolean . TRUE = string . "1" .

echo正在触发字符串上下文。

但是从你下面的评论中我看到,你想了解更多关于比较的信息。看看你做了什么:

Example     Name     Result
$a == $b    Equal    TRUE if $a is equal to $b after type juggling.

所以你在做一个非严格的数字与字符串的比较:

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

注意:数字,而不是接受答案中写的整数:

<?php
print "number of surprised persons: " . ('false' == 0.3 - 0.2 - 0.1);

玩。

false == 0为真。True作为字符串是'1',当你插入值时,你正在进行隐式转换。

$a = true;
echo "$a"; #1

你可以在这里找到一个PHP真值表。我只推荐===比较器,除非你有很好的理由使用==

http://php.net/manual/en/types.comparisons.php