PHP完整性检查,条件/比较

时间:2012-12-04 02:59:41

标签: php string comparison integer

有人可以解释为什么会发生这种情况吗?

$code = 0;
echo $code == 'item_low_stock' ? 'equal' : 'not equal';

// RESULT: "equal"  

???

我的应用程序中的一行代码突然停止正常工作,我没有编辑任何东西,更改了我的php版本,任何东西。当$ code变量包含0时,当我将其与字符串' item_low_stock'进行比较时,它将传递为true。

我可以发布原始的代码块,但我把它归结为这个比较,这就是我找到的。

HALP。

编辑:PHP版本是5.3.10。

2 个答案:

答案 0 :(得分:4)

documentation清楚地表明,在{juggling 之后,==两侧的两个值都经过了测试。当转换为整数时,您的字符串变为0。请尝试以下方法:

echo (int) 'item_low_stock'; // 0

运行它:http://codepad.org/z7LIEumk

如果您不想参与类型杂耍,请改用===!==。这测试两个值是否相同*,意味着相同的值和类型。

答案 1 :(得分:2)

当其中一个操作数是一个数字时 - 然后php也会将另一个操作数转换为数字。

因此item_low_stock字符串已转换为0,因此它等于0,因此它是true

http://php.net/manual/en/language.operators.comparison.php

  

如果您将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都为converted to a number,并且数字执行比较。