2014-09-01 58 views
0

我正在继承遗留代码,我遇到过这段代码。无嵌套大括号的PHP嵌套else语句

  • This Code works!
  • 忽略变量名看{第一个条件打开但从不关闭else没有打开?它仍然有效?
  • 它是继续在两个或只有一个条件,如果哪一个?
  • 为什么它甚至工作?

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

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

+0

'忽略变量名称看'\'{\'第一个条件打开,但从来没有关闭其他没有打开?它仍然有效?'哦,但它确实关闭(第二个到最后一个关闭'}')。 – Cthulhu 2014-09-01 09:17:37

+0

这里的关键在于[a * single *语句不必被包裹在大括号中](http://php.net/manual/en/control-structures.if.php)。你的'continue'行等同于'{continue; }'。我想假设你的其他困惑就在于缩进。我个人建议使用大括号即使是一个单一的声明,但这可能仍然被认为是一个宗教问题。 – 2014-09-01 09:19:53

回答

6

您可以改写代码(用正确的缩进使用):

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 

现在回答你的问题:

它是继续在两个或只有一个条件,如果哪一个?

它是continue仅当嵌套if()(IF#2)语句条件评价为false荷兰国际集团。

它为什么能工作?

它的工作原理,因为if()允许语法,而不括号内为简单的操作。参见手册中的示例1。因此嵌套if()完全由continue关闭操作与以下分隔符;

4

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

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

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

2

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

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

foreach($bla as $foo) { 

    if(condition) { 
     if(condition) { 
      // Do Something 
     }else continue; 
    } 

} 
2

如果“其他”(或者,如果是这样的话)是单行的,则不需要大括号。问题中的“其他”继续内在的“如果”。