1

出于对自然万物的热爱,有人可以解释为什么会发生这种情况吗?

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

// RESULT: "equal"  

???

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

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

哈尔普。

编辑:PHP 版本是 5.3.10。

4

2 回答 2

4

文档清楚地表明,在 type juggling 之后==测试两侧的两个值。当转换为整数时,您的字符串变为. 尝试以下操作:0

echo (int) 'item_low_stock'; // 0

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

如果您不想从事类型杂耍,请使用===or!==代替。这将测试两个值是否*相同*,即相同的值和类型。

于 2012-12-04T03:05:05.137 回答
2

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

所以item_low_stock转换为数字的字符串是0,因此它等于0,因此它是true

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

如果将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都将转换为数字并以数字方式执行比较。

于 2012-12-04T03:02:12.933 回答