我有这段代码:
$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
。
我在这里错过了什么吗?
答案 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