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 的最安全方法是什么?

谢谢。

4

4 回答 4

1

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
}

阅读http://php.net/manual/en/types.comparisons.php

于 2013-10-17T04:49:20.383 回答
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)

于 2013-10-17T04:51:23.477 回答
0

这是因为 === 比较类型和值,而 == 只比较值

$foo = 0;

var_dump((float)$foo==(int)$foo); //Produces true

var_dump((float)$foo===(int)$foo); //Produces false
于 2013-10-17T04:52:07.540 回答
0

实际上它们是两个比较运算符

== 仅检查值是否相等

=== 检查类型和值的相等性。

于 2013-10-17T04:54:34.420 回答