在进行 == 和 === 比较时,变量的顺序是否重要


Does variables' order matter when doing == and === comparisons?

在进行比较时,将变量放在=====之后真的重要吗?

if (null == $var) {
}
if ($var == null) {
}

我经常看到程序员更喜欢这种方式,是为了速度差异吗?

更新:

抱歉,我没有把我的问题说清楚,我想知道的不是=====之间的区别,而是像null == $var$var == null这样的表达式,所以我改变了代码示例。


结论

没有功能或性能差异。有些人认为这是一种最佳实践,或者只是一种编码风格。顺便说一句,它有一个很酷的名字:尤达条件:)

仅供参考:PHP 错误消息使用这种样式,例如

PHP Fatal error:  Cannot use isset() on the result of an expression (you can use "null !== expression" instead)

不知道为什么这个问题被标记为重复到(3 个不同的等于)而不是("false === $var"和"$var === false"有什么区别?

它可以防止拼写错误,从而导致非常难以调试的错误。以防万一您不小心写了=而不是==

if ($var == null)  # This is true in case $var actually is null
if ($var =  null)  # This will always be true, it will assign $var the value null

相反,切换它们更安全:

if (null == $var)   # True if $var is null
if (null =  $var)   # This will raise compiler (or parser) error, and will stop execution.

使用此问题停止特定行上的执行将使调试变得非常容易。相反的方式要困难得多,因为您可能会发现自己进入if条件,并丢失变量的值,并且您不会轻易找到它。

我认为

以下代码可以解释它:

echo (( 0 == NULL ) ? "0 is null" : "0 is not null")  ."'n";
echo  (0 === NULL) ? "0 is null" : "0 is not null"  ;

它将输出:

0 is null
0 is not null

===运算符检查值和类型,但 0 是数字,而 NULL 的类型为 NULL

==运算符只检查值,零可以转换为"假"或"空",因此我们得到的第一行的"真"

将结果与 if s 进行比较。

 echo "Test '1abc' == 1 - ";
 if ('1abc' == 1) {
    echo 'ok';
 } else {
    echo 'fail';
 }
 echo "'nTest '1abc' === 1 - ";
 if ('1abc' === 1) {
    echo 'ok';
 } else {
    echo 'fail';
 }

然后阅读此页面 http://php.net/manual/en/language.types.type-juggling.php 这是非常有趣的讲座;)