我正在研究我继承的遗留代码,并且我遇到了这段代码。
{
第一个条件打开但从不关闭其他没有打开?它仍然有用吗?为什么它会起作用?
foreach($bla as $foo) {
if(condition) {
if(condition) {
// Do Something
}else
continue;
}
}
我的假设是内在条件将使用其他?但我只是假设因为这个答案:Nested if-else behaviour without braces我找不到PHP的确定答案
答案 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)
如果“其他”(或者就此而言)是单行,则不需要大括号。有问题的“其他”继续内在的“如果”。