PHP嵌套的else语句没有大括号

时间:2014-09-01 09:13:59

标签: php

我正在研究我继承的遗留代码,并且我遇到了这段代码。

  • 本规范有效!
  • 忽略变量名称查看 { 第一个条件打开但从不关闭其他没有打开?它仍然有用吗?
  • 是继续两个条件还是只有一个条件,如果一个条件继续?
  • 为什么它会起作用?

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

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

4 个答案:

答案 0 :(得分: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

现在回答您的问题:

  

是继续在两个条件下还是仅在一个条件下继续?

仅当嵌套if()(IF#2)语句条件评估为continue时才false

  

为什么它甚至可以工作?

它的工作原理是因为if() 允许语法而没有括号用于简单操作。参见手册中的示例1。所以嵌套的if()完全被continue操作关闭,并带有以下分隔符;

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:2)

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

因此,只有当第一个IF条件为真时,才会读取第二个IF条件。

foreach($bla as $foo) { 

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

}

答案 3 :(得分:2)

如果“其他”(或者就此而言)是单行,则不需要大括号。有问题的“其他”继续内在的“如果”。