【发布时间】:2015-02-26 10:03:01
【问题描述】:
我了解到空字符串“”,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 行是在比较他们的“错误”解释。
php首先检查两个值是否具有相同的类型,如果是,则假设相同的类型检查相等性;如果不是,它使用值的布尔含义(是否涉及类型转换?)
【问题讨论】:
-
在第一种情况下,您正在比较两个字符串。所以自然“”与“0”不同。在第二个中,由于数据类型不同,发生了更多类型转换。使用三等号
===,不用担心类型转换的歧义 -
只有当你转换为布尔值时,“0”字符串才会被解释为假,在其他情况下不会。
-
如果你对更多有趣的 PHP 行为感兴趣,我建议all-time classic here。
标签: php