有人可以帮我理解为什么会这样吗?
$zero = (float)0;
var_dump($zero);
var_dump(0);
var_dump( ($zero === 0) );
这会产生:
float(0)
int(0)
bool(false)
我真的不明白为什么,我知道巨大的红色警告here,但不是0应该是0?或者PHP实际上是在比较变量类型(float与int)?
假设是这种情况,检查一个数字(不知道其确切类型)是否为0的最安全的方法是什么?
感谢。
答案 0 :(得分:1)
int(0)
与float(0)
相同,只是当您使用===
时,会比较输入和值。在这种情况下,值相同但类型不同,因此其false
。
这些值为Equal
,但不是Identical
。
int(0) == float(0) // true because only value is compared, which is same.
int(0) === float (0) // false because even though value is same, type is also compared, which is different
$ a === $ b'相同'如果$ a等于$ b,则为TRUE,它们属于同一类型 $ a == $ b'等于'如果在类型杂耍之后$ a等于$ b,则为TRUE。
测试变量的数值是否为0的好方法是:
if (intval($zero)==0)
{
// $zero is 0 in numeric terms. You can even send it a string to test, which will be 0
}
答案 1 :(得分:0)
===比较类型和值。如果您只想比较值,请使用==
$zero = (float)0;
var_dump($zero);
var_dump(0);
var_dump( ($zero === 0) );
var_dump( ($zero == 0) );
会回来 浮动(0) INT(0) 布尔(假) 布尔(真)
答案 2 :(得分:0)
这是因为===比较类型和值,==仅比较值
$foo = 0;
var_dump((float)$foo==(int)$foo); //Produces true
var_dump((float)$foo===(int)$foo); //Produces false
答案 3 :(得分:0)
实际上他们是两个比较运营商
==仅检查值的相等性
===检查类型和值的相等性。