【问题标题】:Does variables' order matter when doing == and === comparisons? [duplicate]进行 == 和 === 比较时,变量的顺序是否重要? [复制]
【发布时间】:2013-10-21 12:55:54
【问题描述】:

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

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)

不知道为什么这个问题被标记为重复 (The 3 different equals) 而不是 (What's the difference between 'false === $var' and '$var === false'?)

【问题讨论】:

标签: php comparison-operators


【解决方案1】:

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

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 条件,并且丢失了变量的值,而且您不会轻易找到它。

【讨论】:

  • 所以这没有性能差异?
  • 不,无论哪种方式,cpu 都必须从内存中读取 $var 的值。 $var1==$var2$var2==$var1 之间的区别相同,只是它与常量相比可能比另一个变量更快。
【解决方案2】:

我认为下面的代码会解释它:

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 类型

== 运算符只检查值,零可以转换为“false”或“null”,因此我们在第一行得到的“真实”

【讨论】:

    【解决方案3】:

    将此结果与ifs 进行比较。

     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这是非常有趣的讲座;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      • 1970-01-01
      相关资源
      最近更新 更多