我有以下代码:
$item['price'] = 0;
/* Code to get item information goes in here */
if($item['price'] == 'e') {
$item['price'] = -1;
}
其目的是将商品价格初始化为 0,然后获取有关它的信息。如果价格被告知为“e”,则意味着交换而不是卖出,它以负数存储在数据库中。
也可以将价格保留为 0,因为该物品是奖励,或者因为价格将在稍后设置。
但是,每当价格未设置时,其初始值为 0,if
上面所示的循环评估为 true,价格设置为 -1。也就是说,它认为 0 等于“e”。
这该如何解释呢?
当价格提供为 0 时(初始化后),行为不稳定:有时 if 计算结果为 true,有时计算结果为 false。*
你正在做==
它会为您整理类型。
0
是一个 int,所以在这种情况下它将进行强制转换'e'
到一个整数。哪一个不能被解析为一个,并且会变成0
。一个字符串'0e'
会成为0
并且会匹配!
Use ===
From PHP.net:
使用 == 和其他非严格比较字符串和数字
比较运算符目前通过将字符串转换为数字来工作,
然后对整数或浮点数进行比较。这
得出许多令人惊讶的比较结果,其中最值得注意的是
即 0 == "foobar" 返回 true。
然而这种行为被改变了PHP 8.0:
与数字字符串进行比较时,PHP 8 使用数字比较。
否则,它将数字转换为字符串并使用字符串
比较。
PHP 7
0 == 'foobar' // true
0 == '' // true
4 == '4e' // true (4e is cast as a number and becomes 4)
PHP 8 在进行比较之前将数字转换为字符串
0 == 'foobar' // false
0 == '' // false
4 == '4e' // false ('4e' is considered non-numeric therefore 4 is cast as a string and becomes '4')
这是一个重大更改,因此它是在新的主要 PHP 版本中实现的。此更改破坏了依赖于旧行为的脚本的向后兼容性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)