有人可以解释为什么会发生这种情况吗?
$code = 0;
echo $code == 'item_low_stock' ? 'equal' : 'not equal';
// RESULT: "equal"
???
我的应用程序中的一行代码突然停止正常工作,我没有编辑任何东西,更改了我的php版本,任何东西。当$ code变量包含0时,当我将其与字符串' item_low_stock'进行比较时,它将传递为true。
我可以发布原始的代码块,但我把它归结为这个比较,这就是我找到的。
HALP。
编辑:PHP版本是5.3.10。
答案 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,并且数字执行比较。