在php 5中
$my_var = "";
if ($my_var == 0) {
echo "my_var equals 0";
}
为什么评估为真?在php.net中有关于它的一些参考吗?
答案 0 :(得分:3)
PHP is a weakly typed language。当使用相等的运算符==
进行测试时,空字符串和布尔值false将计算为0。另一方面,您可以强制它使用相同的运算符===
来检查类型:
$my_var = "";
if ($my_var === 0) {
echo "my_var equals 0";
} else {
echo "my_var does not equal 0";
}
这应该会为您提供有关该主题的大量信息:How do the PHP equality (== double equals) and identity (=== triple equals) comparison operators differ?
答案 1 :(得分:3)
字符串和整数不能与==
直接比较。所以PHP执行类型杂耍,看看是否有另一个合理的比较可用。
将字符串与整数进行比较时,首先将字符串转换为整数。您可以找到转化的详细信息here。基本上,由于""
不是有效数字,因此转化的结果为0
。因此,比较变为0 == 0
,这显然是正确的。
您可能希望对大多数(如果不是全部)比较使用身份比较===
。
答案 2 :(得分:1)
在第一行中,您将$my_var
定义为字符串。
在比较中,您将该变量与常数整数进行比较。
如果你想要精确比较(我不知道为什么你需要将一个字符串与没有任何强制转换的整数进行比较),你应该使用===
:
if ($my_var === 0) {
echo "my_var equals 0";
}
这永远不会回应信息。
PHP手册在Comparison Operators section中定义,运算符==
为:
如果$ j在类型杂耍之后等于$ b,则为TRUE。
所以,重要的是type juggling
。
事实上,在PHP Manual: types comparisons中,第二个表格确切地告诉您整数0
等于字符串""
。
答案 3 :(得分:1)
答案 4 :(得分:0)
这是php手册中有关布尔值的参考
http://www.php.net/manual/en/language.types.boolean.php
这里是NULL值的引用
http://www.php.net/manual/en/language.types.null.php
$my_var = '';
if ($my_var == 0) {
echo "my_var equals 0"
}
评估为真,因为""与NULL相同,其值为false或0