【问题标题】:if statement value positionif 语句值位置
【发布时间】:2012-03-24 10:32:10
【问题描述】:

这两种说法有什么区别:

if (false === $variable) {
  //do something
}

if ($variable === false) {
  //do something
}

我个人使用第二种风格,但经常在我使用的框架中遇到代码,而我使用的似乎总是使用第一种风格。

是否有区别(我怀疑这是与类型有关的一些遗留问题)还是这只是一种编码习惯(它必须植根于某些东西??)

如果不是,考虑到逻辑实际上是倒退的,第一种风格背后的原因是什么。

【问题讨论】:

标签: php optimization


【解决方案1】:

if ($foo = false)(注意:= 而不是==)是一个典型的错字,会导致难以调试的问题。出于这个原因,有些人更喜欢false == $foo,因为当您尝试将某些内容分配给false 时,运行时会抛出错误。

除此之外没有区别。

【讨论】:

    【解决方案2】:

    如果您将无法分配给它的值(文字、常量、函数调用等)放在左侧,那么,如果您不小心使用了赋值运算符 (=)比较运算符,那么你会得到一个错误,而不是一个难以追踪的错误。

    if (false = $variable) { // Error
    if ($variable = false) { // Valid code that doesn't do what you want
    

    【讨论】:

      【解决方案3】:

      这可以追溯到 C 编程。这是一种确保“编译器”在您意外使用 =(赋值)而不是 == 或 ===(等于)时会失败的方法,因为“false”不是左值(不能在赋值的左侧)

      【讨论】:

        【解决方案4】:

        源于此:

        if (false = $variable)
        

        语法错误

        if ($variable = false)
        

        意外分配

        【讨论】:

          【解决方案5】:

          它已经存在了一段时间。它来自不小心写(忘记了一个=):

          if (c = 1) {
          }
          

          进行赋值,实际上并没有检查c 是否等于1。它分配1,然后评估为1(因此由于该错误,if 语句始终为真)。通过写作

          if (1 == c) {
          }
          

          作为一种习惯,你不能犯这个错误。如果您在这种情况下忘记了 =,编译器会警告您,因为无法分配给文字 1

          【讨论】:

            【解决方案6】:

            实际上,这两个语句是等价的

            那么,为什么要这样写或其他(?)

            • 尽量避免典型的错字if ($condition = false) 而不是if ($condition == false)。在这种情况下,您的第二个版本会导致难以调试的问题,而第一个版本会引发错误
            • 想要强制首先评估条件语句的两个部分之一(最右边)

            【讨论】:

              猜你喜欢
              • 2016-07-15
              • 1970-01-01
              • 1970-01-01
              • 2018-04-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-09-14
              • 2012-11-11
              相关资源
              最近更新 更多