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