我有以下PHP表达式
($g == $key)
值:$g = objid
和$key = 0
如果我转储表达式
var_dump(array($g == $key,$g, $key));
结果是
array(3) { [0]=> bool(true) [1]=> string(5) "objid" [2]=> int(0) }
为什么显示true
?我在表达式中使用===
来解决问题,但我想知道为什么会发生这种情况。
答案 0 :(得分:3)
PHP正在转换你的" objid"到一个int,并且可能使它成为0
,所以是的,你的" integerized字符串"实际上等于0
。:
php > var_dump(' ' == 0, 'foobar' == 0, 'objid' == 0);
bool(true)
bool(true)
bool(true)
请注意,如果你的'objid'字符串STARTED一个数字,然后它有点/ sorta / not-really工作:
php > var_dump('a1b' == 0, '1ab' == 0);
bool(true)
bool(false)
使用严格比较===
运算符也可以解决这个问题。它会比较值 AND 类型。 'foo' == 0
为真,'foo' === 0
为假。
答案 1 :(得分:2)
答案 2 :(得分:1)
===
是一个类型安全的相等运算符 - 它确保您比较的对象属于同一类型。
==
检查两个对象是否具有相同的'truthy'或'falsey'值。
例如:
0 == '0'
为真,因为'0'被认为是假值,但是
0 === '0'
是假的,因为一个是int而另一个是字符串