PHP:比较运算符中null的运算顺序

9

我通常写成这样:

if ($myvar == null)

但有时我会看到这样的内容:

if (null == $myvar)

我记得有人告诉我后者更好,但我不记得为什么。

您知道哪一个更好,以及为什么吗?

谢谢, 丹


1
这是 https://dev59.com/-HVC5IYBdhLWcg3whBWj 和许多其他问题的副本。 - Harmen
6个回答

11

如果您意外地忘记其中一个 =,第二个就会报错。

if ($myvar = null)

这将会把null赋给$myvar并对结果进行if检查。

if (null = $myvar)

这会尝试将$myvar的值分配为null并因为你不能分配给null而导致错误。


1
这个人可能暗示的是关于条件语句的微小优化。例如,在下面的代码中,如果第一个条件失败了,第二个条件就不会被执行。
if (1 == 0 && 1 == 1)

然而,你所拥有的将始终被评估。因此顺序并不重要,已经提到的约定是正确的方式。


1

这不是关于顺序的问题,而是要避免意外跳过一个=,这将导致赋值而不是比较。当使用常量优先约定时,意外跳过会抛出错误。


0

我曾经看到后者被用来帮助避免程序员错误,例如:

if($myvar = null)

这将始终返回true,而

if(null = $myvar)

会抛出一个错误。


不,第一个将返回“null”,在布尔转换中评估为“false”,因此此条件永远不会通过。另一个问题是它还将把“$myvar”设置为“null”。 - lonesomeday

0

你可以使用 is_null() 代替。


不是他所问的,这是关于操作数顺序的问题。 - fredley

0

在编程中,使用赋值运算符=代替相等运算符==是一个常见的错误:

if($myvar = null)

这实际上将null分配给$myvar。 捕获此逻辑错误的一种方法是在左侧使用常量,以便如果您使用=代替==,则会出现错误,因为常量(在此情况下为null)不能被分配值:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接