有人可以帮我理解为什么会这样吗?
$zero = (float)0;
var_dump($zero);
var_dump(0);
var_dump( ($zero === 0) );
这会产生:
float(0)
int(0)
bool(false)
我真的不明白为什么,我知道这里有巨大的红色警告,但 0 不应该是 0 吗?或者 PHP 实际上是在比较变量类型(float 和 int)?
假设是这种情况,检查数字(不知道其确切类型)是否为 0 的最安全方法是什么?
谢谢。
有人可以帮我理解为什么会这样吗?
$zero = (float)0;
var_dump($zero);
var_dump(0);
var_dump( ($zero === 0) );
这会产生:
float(0)
int(0)
bool(false)
我真的不明白为什么,我知道这里有巨大的红色警告,但 0 不应该是 0 吗?或者 PHP 实际上是在比较变量类型(float 和 int)?
假设是这种情况,检查数字(不知道其确切类型)是否为 0 的最安全方法是什么?
谢谢。
int(0)与 相同float(0),只是当您使用===then 类型以及值时进行比较。在这种情况下,值相同但类型不同,因此它的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 'Identical' 如果 $a 等于 $b,并且它们属于同一类型,则为 TRUE。
$a == $b 'Equal' 如果在类型杂耍之后 $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
}
=== 比较类型和值。如果您只想比较价值,请使用 ==
$zero = (float)0;
var_dump($zero);
var_dump(0);
var_dump( ($zero === 0) );
var_dump( ($zero == 0) );
将返回 float(0) int(0) bool(false) bool(true)
这是因为 === 比较类型和值,而 == 只比较值
$foo = 0;
var_dump((float)$foo==(int)$foo); //Produces true
var_dump((float)$foo===(int)$foo); //Produces false
实际上它们是两个比较运算符
== 仅检查值是否相等
=== 检查类型和值的相等性。