PHP表达式是真的

时间:2014-08-27 18:51:19

标签: php

我有以下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?我在表达式中使用===来解决问题,但我想知道为什么会发生这种情况。

3 个答案:

答案 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)

来自manual

  

如果您将数字与字符串进行比较或比较涉及   数字字符串,然后每个字符串转换为一个数字和   比较用数字表示。

" objid"不是有效数字,因此它被转换为0。

答案 2 :(得分:1)

===是一个类型安全的相等运算符 - 它确保您比较的对象属于同一类型。

==检查两个对象是否具有相同的'truthy'或'falsey'值。 例如:

0 == '0' 

为真,因为'0'被认为是假值,但是

0 === '0'

是假的,因为一个是int而另一个是字符串