为什么PHP以不同的方式处理悬挂的其他东西?

时间:2012-03-29 20:58:29

标签: php syntax

我有这段代码:

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

else语句似乎会根据$a的值更改“所有权”。如果它是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

我在这里错过了什么吗?

4 个答案:

答案 0 :(得分:10)

您的第一个代码为

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

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

当您不使用大括号时,只有下一个语句(语句,而不是行)才会作为该控件结构的一部分执行。它并不含糊,因为这种行为在编程语言中有明确的定义。

答案 1 :(得分:4)

$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被视为独立的代码段。

答案 2 :(得分:3)

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

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

所以我猜这就是它正在做的事情。

答案 3 :(得分:2)

帮助你弄清楚缩进是否正确,即

$a = false; 

if ($a) echo 'A';

if (false) echo 'B'; 
else echo 'C';

a - false,结果为C. a - 真实,结果AC