0 ==''和'0'==''相同吗?

时间:2012-02-22 06:39:45

标签: php equals

考虑以下PHP语句:

echo ( 0  == '' ? 1 : 0); // Output is 1
echo ('0' == '' ? 1 : 0); // Output is 0

第一个将打印1,第二个将打印0.不应该打印0吗?这是预期的行为吗?我猜它是因为第二个是字符串而第一个不是,但我想要另一个答案。

8 个答案:

答案 0 :(得分:6)

答案 1 :(得分:3)

在Php空字符串中,NULL和0相等。 在第二种情况下,'0'是另一个字符串,''是另一个字符串。所以你得到的结果是假的。

PHP中的

"", 0, "0", False, array(), Null都被认为是假的。

您可以使用===使它们与众不同。

答案 2 :(得分:1)

这是正确的行为。 0等于空字符串以及false / null

答案 3 :(得分:1)

这是因为第一行没有比较两个相同类型的变量:

echo ( 0  == '' ? 1 : 0); // Output is 1
echo ('0' == '' ? 1 : 0); // Output is 0

请注意以下事项:

echo ( 0  === '' ? 1 : 0); // Output is 0

===运算符执行类型敏感的等式检查,这似乎是您所期望的。如果两个参数的类型不同,==将进行一些模糊检查。

您应该查看comparison operators documentation以获取更多信息:

  

如果您将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都会转换为数字,并且数字会进行比较。

答案 4 :(得分:1)

我认为第一个是将0和空字符串解释为“false”,它们的出现是相同的。 PHP有很多关于它将被解释为真/假的怪癖。 第二个是将字符串'0'与一个空白字符串进行比较,并得出不相等的字符。

为了确保比较实际值,您应该使用===比较

答案 5 :(得分:1)

0 ==''== null

但是'0'是一个字符串。

你最好用 === 来检查0,'0',null

的区别
php > var_dump(0);
int(0)
php > var_dump('0');
string(1) "0"
php > var_dump(null);
NULL
php > var_dump('');
string(0) ""

答案 6 :(得分:1)

您可以在此处找到比较逻辑: http://php.net/manual/en/language.operators.comparison.php

Type of Operand 1    Type of Operand 2    Result

null or string       string               Convert NULL to "", numerical or lexical comparison

string, resource     string, resource     Translate strings and resources to numbers, usual math
or number            or number

这意味着对于'0' == '',第一种情况适用,并且使用词汇比较。根据词汇比较,“0”和“”不相等。

对于0 == '',第二种情况适用。在这种情况下,''会转换为数字0,等于0

答案 7 :(得分:0)

'0' == ''永远都是假的。因为符号'0'不是空符号。但在PHP 0(零)和空符号是相同的。