我有下面这段代码:
$item['price'] = 0;
/* Code to get item information goes in here */
if($item['price'] == 'e') {
$item['price'] = -1;
}
它的目的是将商品价格初始化为0,然后获取有关它的信息。如果价格被告知为'e‘,则表示交换而不是卖出,后者以负数存储在数据库中。
也有可能将价格保留为0,因为该项目是奖励,或者价格将在稍后设置。
但是,只要没有设置价格,它的初始值就是0,上面指出的if
循环的计算结果为真,价格被设置为-1。也就是说,它认为0等于'e‘。
这怎么解释呢?
当价格被提供为0(初始化后)时,行为不稳定:有时if计算为true,有时计算为false。*
发布于 2011-07-27 18:47:46
==运算符将尝试匹配值,即使它们属于不同的类型。例如:
'0' == 0 will be true
如果您还需要类型比较,请使用===运算符:
'0' === 0 will be false
发布于 2013-03-29 22:47:21
你的问题是双等运算符,它会将右成员类型转换为左类型。如果您愿意,可以使用strict。
if($item['price'] == 'e') {
$item['price'] = -1;
}
让我们回到你的代码(上面复制的)。在这种情况下,在大多数情况下,$item‘’price‘是一个整数(显然,当它等于e时除外)。因此,根据PHP的规则,PHP会将"e"
类型转换为整数,从而产生int(0)
。(不相信我?<?php $i="e"; echo (int)$i; ?>
)。
要轻松摆脱这一点,可以使用三重相等(精确比较)运算符,它将检查类型,而不会隐式进行类型转换。
附言:一个有趣的事实:a == b
并不意味着b == a
。拿你的例子来反其道而行之:如果$item‘if ("e" == $item['price'])
’始终是一个整数,那么价格将永远不会真正实现。
发布于 2012-04-26 13:54:06
在PHP中有一个相当方便的方法来验证"0"," false ","off“作为== false和"1","on"," true”的组合作为== true,这是经常被忽视的。它对于解析GET/POST参数特别有用:
filter_var( $item['price'], FILTER_VALIDATE_BOOLEAN );
它与这个用例并不完全相关,但考虑到相似性和事实,这是搜索在询问验证(字符串)“0”是否为false的问题时倾向于发现的结果,我认为这会对其他人有所帮助。
https://stackoverflow.com/questions/6843030
复制相似问题