为什么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为条件)。我把注意力集中在别的事情上,把自己弄糊涂了。天才