PHP比较相等,空字符串,“0”和0

时间:2015-02-26 10:03:01

标签: php

我了解到空字符串"",0和" 0"所有在PHP中都是假的。我想知道php在比较平等时会考虑到这一点。

    $str = "";        
    echo ($str ==  "0") ? "yes" : "no"; // prints "no" (A)

    echo ($str ==   0)  ? "yes" : "no"; // prints "yes" (B)

A行表明php正在比较$ str和" 0"好像它们都是字符串,忽略它们都可能意味着错误。但是B行正在比较他们的" false"解释

因此,php首先检查这两个值是否具有相同的类型,如果是这样,它会检查相等的类型;如果没有,它使用值的布尔含义(是否涉及类型转换?)

3 个答案:

答案 0 :(得分:2)

  

我了解到空字符串“”,0和“0”在php中都表示错误。

这句话是错误的。当转换为布尔类型时,空字符串0"0"为false。否则它们分别是空字符串,整数零或带有一个字符的字符串。

==检查两个变量的值。如果他们的类型不同,则会发生一些投射并且不可预测(对于新手)结果会出现。

===检查两个变量的类型值。

无论如何,当你比较"0" == ""时,PHP解释器会比较两个不同的字符串。但是当你使用0 == ""时,它首先将数字字符串更改为整数。空字符串等于0.所以我们最终得到0 == 0,这是真的。

注意:转换为整数后,"8abc"变为8。投标时abc8成为0

手册:
- Types casting (juggling)
- Types comparison

答案 1 :(得分:0)

PHP中有两个相等比较器

当类型相同时,它们的行为方式相同。

当类型不同时,一切都取决于:PHP 将两个值都转换为布尔值。它取决于两个操作数的类型,并且有一个表可以知道PHP将做什么(参见第二个链接)。

我建议阅读此stackoverflow问题 How do the PHP equality (== double equals) and identity (=== triple equals) comparison operators differ?

另外,PHP手册进行比较 http://au.php.net/manual/en/language.operators.comparison.php

// double equal will cast the values as needed followin quite complex rules
0 == '0' // true, because PHP casted both sides to numbers

// triple equals returns true only when type and value match
0 === '0' // false

答案 2 :(得分:-1)

$str = "";        

//Comparing two strings, no implicit type conversion happens. Since
// "" is not equal "0", result is FALSE
echo ($str ==  "0") ? "yes" : "no"; // prints "no" (A)

//Comparing a STRING to an INT,implicit conversion happens to convert
// the string "" to an INT. Since "" has no digits, it's evaluated
// to 0. Hence, result of comparison is TRUE    
echo ($str ==   0)  ? "yes" : "no"; // prints "yes" (B)

使用" ==="为了更准确的比较。