【发布时间】:2012-03-17 04:42:21
【问题描述】:
在 php 5 中
$my_var = "";
if ($my_var == 0) {
echo "my_var equals 0";
}
为什么它评估为真? php.net中有没有关于它的参考?
【问题讨论】:
标签: php variables evaluation
在 php 5 中
$my_var = "";
if ($my_var == 0) {
echo "my_var equals 0";
}
为什么它评估为真? php.net中有没有关于它的参考?
【问题讨论】:
标签: php variables evaluation
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?
【讨论】:
字符串和整数不能与== 直接比较。所以 PHP 会执行类型杂耍,看看是否有其他合理的比较可用。
当一个字符串与一个整数进行比较时,字符串首先被转换为一个整数。您可以找到转换的详细信息here。基本上,由于"" 不是有效数字,因此转换的结果是0。因此,比较变成了0 == 0,这显然是正确的。
您可能希望对大多数(如果不是全部)比较使用身份比较 ===。
【讨论】:
【讨论】:
在第一行中,将$my_var 定义为字符串。
在比较中,您将该变量与一个常量整数进行比较。
如果你想要精确比较(我不知道为什么你需要将一个字符串与一个没有任何强制转换的整数进行比较),你应该使用===:
if ($my_var === 0) {
echo "my_var equals 0";
}
这永远不会回显消息。
PHP手册在Comparison Operators section中定义,运算符==为:
如果在类型杂耍之后 $a 等于 $b,则为 TRUE。
所以,这里重要的是type juggling。
事实上,在PHP Manual: types comparisons 中,第二个表准确地告诉你整数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"
}
评估为真,因为“”与评估为假或 0 的 NULL 相同
【讨论】: