【问题标题】:PHP nested else statement without bracesPHP嵌套没有大括号的else语句
【发布时间】:2014-09-01 09:13:59
【问题描述】:

我正在处理我继承的遗留代码并且我遇到了这个代码。

  • 此代码有效!
  • 忽略变量名看{第一个Condition打开但从不关闭else有没有打开?还能用吗?
  • 它是在两种情况下继续还是仅在一种情况下继续,如果是哪一种情况?
  • 为什么它甚至可以工作?

    foreach($bla as $foo) { 
    
       if(condition) {
       if(condition) {
        // Do Something
       }else
         continue;
       }
    
    }
    

我的假设是内部条件将使用 else?但我只是假设因为这个答案:Nested if-else behaviour without braces我找不到 PHP 的明确答案

【问题讨论】:

  • Ignore the variable names look at the `{` the first Condition opens but never closes the else has no open? it still works? 哦,但它确实关闭了(倒数第二个关闭})。
  • 这里的关键是a single statement doesn't have to be wrapped in braces。您的continue; 行等同于{ continue; }。我想你剩下的困惑只是缩进。我个人建议在单个语句周围使用大括号,但这可能仍被视为宗教问题。

标签: php


【解决方案1】:

您可以改写这段代码(使用适当的缩进):

foreach($bla as $foo) {   // FOREACH
   if(condition) {        // IF#1
      if(condition) {     // IF#2
          // Do Something
      } else continue;    // END IF#2
   }                      // END IF#1
}                         // END FOREACH

现在回答您的问题:

它是在两种情况下继续还是仅在一种情况下继续,如果是哪一种情况?

只有当嵌套的if() (IF#2) 语句条件评估为false 时,它才是continueing。

为什么它甚至可以工作?

之所以有效,是因为if() 允许语法不带括号进行简单操作。请参阅手册中的示例 1。所以嵌套的if() 完全由continue 操作关闭,并带有以下分隔符;

【讨论】:

    【解决方案2】:

    是的,else 适用于内部条件。代码编译是因为else 块没有左大括号,所以大括号仍然是平衡的。这是正确缩进的相同代码:

    foreach($bla as $foo) { 
        if(condition) {
            if(condition) {
                // Do Something
            }
            else
                continue;
        }
    }
    

    当然,这是不一致的,也是编写此代码的一种非常糟糕的方式。

    【讨论】:

      【解决方案3】:

      当然这意味着如果第一个 IF 条件为真,那么它将转到第二个 IF 条件。

      所以第二个 IF 条件只有在第一个为真时才会被读取。

      foreach($bla as $foo) { 
      
          if(condition) {
              if(condition) {
                  // Do Something
              }else continue;
          }
      
      }
      

      【讨论】:

        【解决方案4】:

        如果“else”(或者如果,就此而言)是单行的,则不需要大括号。有问题的“else”是内部“if”的延续。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-06-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-16
          • 2012-07-02
          • 2014-05-12
          • 1970-01-01
          相关资源
          最近更新 更多