php,我最亲爱的老 friend 。
好的,所以我可以理解为什么字符串“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
当然,我主要使用运算符 === 来比较东西。既然我知道了这一点,我当然必须调整我的程序,毫无疑问。但仍然!有人可以阐明 pl0x 吗?
最佳答案
这是因为,当您将字符串与整数进行比较时,它们不会同时转换为字符串或 bool 值 - 它们会转换为整数。对于 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的字符串版本是空字符串)。
关于php 运算符 ==(有点相等)和整数 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7744879/