PHP 认为 null 等于零
在 PHP 中,当 $myvariable 为零时,表达式的值为 true;当 $myvariable 为 null 时,此表达式的值也为 true。如何排除第二种情况?我的意思是,我希望只有当$myvariable为零时,表达式才为真。当然我可以写($myvariable==0)
($myvariable != null && $myvariable == 0)
但是,还有其他优雅的方法可以做到这一点吗?
在 PHP 中,当 $myvariable 为零时,表达式的值为 true;当 $myvariable 为 null 时,此表达式的值也为 true。如何排除第二种情况?我的意思是,我希望只有当$myvariable为零时,表达式才为真。当然我可以写($myvariable==0)
($myvariable != null && $myvariable == 0)
但是,还有其他优雅的方法可以做到这一点吗?
你暗示了一个深刻的问题:什么时候一个表达应该是真的?
下面,我将解释为什么您正在做的事情不起作用以及如何解决它。
在许多语言中,和空字符串 () 都计算为 false,这可以使语句非常简洁和直观,但是 , 和 也都是不同的类型。应该如何比较它们?null
0
""
if
null
0
""
此页面告诉我们,如果我们有两个变量进行比较,则变量将按如下方式转换(在第一个匹配项时退出表)
Type of First Type of Second Then
null/string string Convert NULL to "", numerical/lexical comparison
bool/null anything Convert to bool, FALSE < TRUE
因此,您正在比较空值与数字。因此,null 和数字都转换为布尔值。此页面告诉我们,在这样的转换中,两者都被认为是 .null
0
FALSE
您的表达式现在显示为 ,这当然是正确的。false==false
但不是你想要的。
此页面提供了 PHP 的比较运算符列表。
Example Name Result
$a == $b Equal TRUE if $a equals $b after type juggling.
$a === $b Identical TRUE if $a equals $b, AND they are of the same type.
$a != $b Not equal TRUE if $a not equals $b after type juggling.
$a <> $b Not equal TRUE if $a not equals $b after type juggling.
$a !== $b Not identical TRUE if $a not equals $b, or they are not of the same type.
$a < $b Less than TRUE if $a is strictly less than $b.
$a > $b Greater than TRUE if $a is strictly greater than $b.
$a <= $b Less than/equal TRUE if $a is less than or equal to $b.
$a >= $b Greater than/equal TRUE if $a is greater than or equal to $b.
第一个比较器是您现在使用的比较器。请注意,它执行我之前提到的转换。
使用第二个比较器将解决您的问题。由于 null 和数字的类型不同,因此比较将返回 false,而不是像运算符那样执行类型转换。===
==
希望这有帮助。