我了解到空字符串"",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首先检查这两个值是否具有相同的类型,如果是这样,它会检查相等的类型;如果没有,它使用值的布尔含义(是否涉及类型转换?)
答案 0 :(得分:2)
我了解到空字符串“”,0和“0”在php中都表示错误。
这句话是错误的。当转换为布尔类型时,空字符串0
和"0"
为false。否则它们分别是空字符串,整数零或带有一个字符的字符串。
==
检查两个变量的值。如果他们的类型不同,则会发生一些投射并且不可预测(对于新手)结果会出现。
===
检查两个变量和的类型值。
无论如何,当你比较"0" == ""
时,PHP解释器会比较两个不同的字符串。但是当你使用0 == ""
时,它首先将数字字符串更改为整数。空字符串等于0.所以我们最终得到0 == 0
,这是真的。
注意:转换为整数后,"8abc"
变为8
。投标时abc8
成为0
答案 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)
使用" ==="为了更准确的比较。