【问题标题】:How to correctly format PHP 'IF ELSE' statements?如何正确格式化 PHP 'IF ELSE' 语句?
【发布时间】:2010-10-07 17:04:10
【问题描述】:

这是一个长期存在的问题,我在多次热火朝天的编码会议中遇到过。

一个人以这种方式编码另一个人以这种方式编码。所以经过多次推拉,我很好奇...... 是否有任何正确的方式来表达 PHP 'IF ELSE' 语句?

我个人使用:

if ($variable == 'setvalue')
{
    $variable = executefunctiononvariable($variable);
} else {
    $variable = executedifferentfunctiononvariable($variable);
}

经过多次争论,尽管我得到了其他选择,例如:

if ($variable == 'setvalue')
{
    $variable = executefunctiononvariable($variable);
}
else
{
    $variable = executedifferentfunctiononvariable($variable);
}

if ($variable == 'setvalue')
    $variable = executefunctiononvariable($variable);
else
    $variable = executedifferentfunctiononvariable($variable);

if ($variable == 'setvalue') {
    $variable = executefunctiononvariable($variable);
} else {
    $variable = executedifferentfunctiononvariable($variable);
}

【问题讨论】:

    标签: php code-formatting readability if-statement semantics


    【解决方案1】:

    我个人将我的 if/else 格式化为最后一个:

    if ($variable == 'setvalue') {
        $variable = executefunctiononvariable($variable);
    } else {
        $variable = executedifferentfunctiononvariable($variable);
    }
    

    在我看来,你的版本是 1 和 3 的混合体。

    我还与可以完成所有这些工作的编码员一起工作,但从未听说过标准编码。

    php网站使用最后一个:http://ca2.php.net/manual/en/control-structures.elseif.php

    在某些情况下,当 if 语句总是很短时,我也会使用第二个示例。如果它有可能变得更长(每个超过 1 行),我会做 #1。我尽量避免 #2,因为以后很难添加 {}。

    【讨论】:

    【解决方案2】:

    我用的是最后一个:

    if ($variable == 'setvalue') {
        $variable = executefunctiononvariable($variable);
    } else {
        $variable = executedifferentfunctiononvariable($variable);
    }    
    

    话虽如此,你选择哪一个并不重要,只要确保你一致

    【讨论】:

      【解决方案3】:

      正确的方法是遵循项目的编码标准。如果没有,请采用 PHP-FIG、Zend、Symfony 等中的一种。

      这种形式看起来很受欢迎:

      if (condition) {
          statements
      } else {
          statements
      }
      

      对于变量赋值,如果语句可以清晰地放在一行中,我将使用三元组

      $variable = !empty($foo) ? $foo : 'default';
      

      更新:我已经删除了关于多行三元语句的部分,因为我不再认为这是一种明智的做法。

      【讨论】:

      • 您使用 ?: 时遇到的问题是这些函数调用可能有副作用。我也没有马上看到这个任务——也许缩进过去的 = 会让它更明显。就个人而言,我不同意比较中变量之前的常量,因为它使...
      • ... 代码读起来不自然。例如,“count($array) > $i”比“$i
      • @strager:您只在检查相等性 (==) 时将文字放在左侧,因为重点是避免意外分配(这可能会导致非常奇怪的错误)。
      • @strager:不用担心副作用,条件运算符不会同时执行这两个选项;它在操作上与 if/else 相同。
      • 我个人只在整个语句很容易放在 1 行时才使用“? :”。任何更大/复杂的东西都会成为可读性的“如果”
      【解决方案4】:

      我个人更喜欢:

      if(something){
          doSomething();
      }
      elseif(somethingElse){
          doSomethingElse();
      }
      else{
          doAnotherThing();
      }
      

      【讨论】:

      • 没有“正确”的方法,这是所有方法中最丑的。为什么?您通过将右大括号留在其自己的行上来创建额外的空间,好像给它一些额外的视觉分隔,但是无论如何您都会将 if 语句轻推到代码块上。对我来说,这看起来像是一个不一致的混乱。你的 else 语句后面没有空格也让我很困扰:D
      • 同意马克。我不喜欢这种方式。
      • 实际上,自从写了这个答案后,我就改用了 mrclay 的方法(他的第一个代码块,而不是第二个)现在两个人认为这很难看。
      • 这个问题是间距,而不是块关闭后的额外换行。有额外的换行意味着 elsif 和 else 在 if 的正下方排列。这对我来说看起来最正确,而不是执行 } else {,这意味着 else 缩进了两个空格。但是,是的,在测试和开放块之前缺少空间是可怕的。
      【解决方案5】:

      别忘了

      if (expression):
         // code goes here
      elseif (another expression):
         // code goes here
      else:
         // code goes here
      endif;
      

      当我在做一些标签汤时,我个人喜欢这种结构。

      【讨论】:

      • 我只喜欢在中间折腾 HTML 的情况。
      【解决方案6】:

      最重要的是,从事项目工作的程序员几乎都遵守相同的编码准则。因此,开会并选择其中一个,然后坚持下去。

      【讨论】:

        【解决方案7】:

        我曾经一直这样做 (2),但由于 Sun 的编码约定使用 (4),所以在 Java 编程中它被我打败了。所以现在我已经习惯了(4)。我最近一直在做一些 C#,它似乎默认使用 (2)(叹气,我们又来了)。

        我习惯于使用 PHP (4),但 (2) 也很好。我不喜欢 (1)一点也不

        并且(3)是危险的。就我个人而言,我认为语言的语法应该需要大括号,即使它只是一个语句。避免您陷入麻烦。我认为 Perl 就是这样凭记忆做到的。

        我也讨厌的是人们这样做:

        if (something) {
          // do something
        }
        else if (something else) {
        }
        

        那个让我发疯。所以我只觉得(2)和(4)是可以接受的。我不在乎它是哪一个,只要它始终如一地完成,最好在语言的约定范围内。

        【讨论】:

        • 为什么它会让你发疯?这是最合乎逻辑的写法。使用 } else { 意味着它不在 if 下,这在我看来很奇怪。
        【解决方案8】:

        没有正确或错误的方式,这是一种意见。就个人而言,我最喜欢最后一个(1TBS???)。我从不使用没有大括号的那个,我认为它总体上是不好的风格。

        唯一能真正为您回答这个问题的人是其他将要编写代码的人。每个人都同意编码标准是很重要的。您选择哪种标准并不重要,因为每个人都使用它。

        【讨论】:

          【解决方案9】:

          PEAR 编码标准是 PHP 编码标准。我建议您习惯它,因为您会在 Zend、Doctrine、Symfony、Horde 等其他项目中找到它。

          http://framework.zend.com/manual/en/coding-standard.coding-style.html#coding-standard.coding-style.control-statements.if-else-elseif

          【讨论】:

          • 至少有人提到已经有编码标准了。
          【解决方案10】:

          简而言之,这不是正确的做法。只要它有效,任何你觉得最好的,你都可以使用。你应该选择一个然后坚持下去,它会让你的代码更容易识别。

          唯一的问题是,如果您不包含“{”字符,则您只能使用一个表达式或函数。

          另外,如果您只想定义变量,可以使用以下代码:

          $variable = (CONDITIONAL STATEMENT) ? "It was true" : "It was false"; 
          

          【讨论】:

            【解决方案11】:

            在我的公司,我们使用:

            if ($variable == 'setvalue')
            {
                $variable = executefunctiononvariable($variable);
            }
            else
            {
                $variable = executedifferentfunctiononvariable($variable);
            }
            

            只要有标准,我无所谓

            【讨论】:

              【解决方案12】:

              对我来说真的......这并不重要。我相信您应该能够毫无问题地阅读任何一种方式。花括号是否在新行上真的很重要吗?右括号后是否有空格真的很重要吗?

              只要代码以这样一种方式完成,至少有人尝试使其可读,我真的不在乎。

              有正确的方法吗?好吧,如果有,那为什么我们可以选择不同的方式呢?

              【讨论】:

                猜你喜欢
                • 2019-08-28
                • 2011-05-18
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多