为什么PHP以不同的方式处理悬挂的其他内容


Why is PHP handling the dangling else differently?

我有一段代码:

$a = false;
if ($a) 
    echo 'A'; if (false) echo 'B';
  else echo 'C';

else语句将根据$a的值更改"belongship"。如果它是true,它似乎将其解释为:

if ($a) 
{
    echo 'A';
    if (false) 
    {
        echo 'B';
    } 
    else 
    {
        echo 'C';
    }
}

并打印AC。但如果$a = false,它似乎将其解释为:

if ($a) 
{
    echo 'A';
    if (false) 
    {
        echo 'B';
    } 
}
else 
{
    echo 'C';
}

并打印C

我是不是遗漏了什么?

您的第一个代码读取为

$a = false;
if ($a) {
    echo 'A';
}
if (false) {
    echo 'B';
}
else {
    echo 'C';
}

如果不使用大括号,则只有下一条语句(语句,而不是行)作为该控制结构的一部分执行。它并不含糊,因为这种行为在编程语言中有明确的定义。

$a = false;
if ($a) 
    echo 'A'; if (false) echo 'B';
  else echo 'C';

等于

$a = false;
if ($a) echo 'A';
if (false) echo 'B'; else echo 'C';

由于if控制结构接受语句作为主体,请参阅:http://php.net/if

echo 'A';就是这样的陈述。因此,下一个if被视为一段独立的代码。

两组结果都与单一解释一致:

if ($a) 
{
    echo 'A';
}
if (false) 
{
    echo 'B';
} 
else 
{
    echo 'C';
}

所以我想这就是它在做什么。

如果您得到正确的缩进,即,则会有所帮助

$a = false; 
if ($a) echo 'A';
if (false) echo 'B'; 
else echo 'C';

a-false,结果为Ca-true,结果AC