PHP:比较null中运算符的顺序
我通常这样写:PHP:比较null中运算符的顺序,php,operators,Php,Operators,我通常这样写: if ($myvar == null) 但有时我读到: if (null == $myvar) 我记得有人告诉我后者更好,但我不记得为什么 你知道哪个更好,为什么 谢谢, Dan如果您不小心忘记了其中一个=,则第二个将给出一个错误 if ($myvar = null) 这将null分配给$myvar,并对结果执行if检查 if (null = $myvar) 这将尝试将$myvar的值分配给null,并给出一个错误,因为您无法分配给null,这与顺序无关,而是要避免意外跳
if ($myvar == null)
但有时我读到:
if (null == $myvar)
我记得有人告诉我后者更好,但我不记得为什么
你知道哪个更好,为什么
谢谢,
Dan如果您不小心忘记了其中一个
=
,则第二个将给出一个错误
if ($myvar = null)
这将null
分配给$myvar
,并对结果执行if
检查
if (null = $myvar)
这将尝试将
$myvar
的值分配给null
,并给出一个错误,因为您无法分配给null
,这与顺序无关,而是要避免意外跳过一个=
,这将导致赋值而不是比较。使用常量优先约定时,意外跳过会引发错误。我见过后者用于帮助避免程序员错误,例如:
if ($myvar = null)
if($myvar = null)
这将始终返回true,而
if(null = $myvar)
将引发错误。您可以改用
is_null()
。使用赋值运算符=
代替相等运算符=
是常见错误:
if ($myvar = null)
if($myvar = null)
它实际上将
null
分配给$myvar
。捕获此逻辑错误的一种方法是在LHS上使用常量,这样如果您使用=
代替=
,您将得到一个错误,因为常量(在本例中为null
)无法赋值:此人可能提到的是关于条件语句的微优化。例如,在下面的示例中,第二个条件不会被评估为第一个条件已经失败
if (1 == 0 && 1 == 1)
但是,您所拥有的将始终得到评估。因此,顺序并不重要,前面提到的惯例就是要走的路。这是我所看到的和其他许多惯例的重复。这是有道理的。谢谢不是他要求的,这是关于操作数顺序的。不,第一个将返回
null
,在布尔转换中计算为false
,因此此条件将永远不会通过。另一个问题是,它还将$myvar
设置为null
。