为什么PHP处理悬空的方式不同?

为什么PHP处理悬空的方式不同?,php,syntax,Php,Syntax,我有一段代码: $a = false; if ($a) echo 'A'; if (false) echo 'B'; else echo 'C'; else语句似乎会根据$a的值更改“belongship”。如果它是真的,它似乎将其解释为: 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';
else
语句似乎会根据
$a
的值更改“belongship”。如果它是
真的
,它似乎将其解释为:

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';
}

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

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

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';
因为
如果控制结构接受语句作为主体,请参见:


echo'A'就是那句话。因此,下一个
if
被视为独立的代码块。

如果缩进正确,则会有所帮助,即

$a = false; 

if ($a) echo 'A';

if (false) echo 'B'; 
else echo 'C';
a-错误,结果是C
a-正确,结果AC

在第一个示例中没有含糊不清的代码。像这样的问题是为什么人们在最简单的情况下都应该使用大括号。(甚至在我看来)停下来,从国家的角度思考这个问题,你的两个片段(包含{})发生的原因就显而易见了。这不是PHP实际看到它的方式,只是碰巧在逻辑上等同于PHP看到它的方式(以$a为条件)。我把注意力集中在别的事情上,把自己弄糊涂了。天才