知道在PHP中我们可以忽略条件块中的大括号,在“if”,“else if”或“else”标记之后只有一个函数/行,如下所示:
if (myVal == "1")
doThis();
else if (myVal == "2")
doThat();
else
doNothing();
我问自己是否有这样的事情:
if (myVal == "1")
doThis();
else
if (myVal2 == true)
doThat();
else
doNothing();
被PHP视为:
if (myVal == "1")
{ doThis(); }
else
{
if (myVal2 == true)
{ doThat(); }
else
{ doNothing(); }
}
或者这个:
if (myVal == "1")
{ doThis(); }
else if(myVal2 == true)
{ doThat(); }
else
{ doNothing(); }
简短版本:其他人之后的“换行符”是否足以将其与一个“if”语句分开,还是会被视为“if if else”
编辑我自己的问题,以确认我的猜测:
if(false)
echo "1";
else
if (false)
echo "2";
else
echo "3";
显示“3”,而以下是因为发现了两个else语句而引发错误:
if(false)
echo "1";
else
if (false)
echo "2";
else
echo "4";
else
echo "3";
所以断线似乎没有任何区别,唯一重要的是“if”和“else”计数。
答案 0 :(得分:4)
如果没有大括号,PHP只会将下一行视为要执行的代码块。
if (myVal == "1")
doThis();
else
if (myVal2 == true)
doThat();
else
doNothing();
myVal
"1"
doThis();
是下一行,因此被选为要执行的代码块。如果那里有更多的代码:
if (myVal == "1")
doThis();
doThisToo();
它仍然只会doThis()
作为if
语句的一部分执行,而doThisToo()
会始终执行。
如果myVal != "1"
它选择else
条件中的第一个块并仅执行该if
条件。
在这种情况下,需要评估另一个if (myVal2 == true)
语句:
{{1}}
这个逻辑继续:通过获取下一行或下一个由大括号括起来的块来识别下一个要执行的代码块。
答案 1 :(得分:0)
我认为您的两个示例结果都完全相同。
除非花括号另外指定,否则 else
始终属于前面的if
。
if
(包括可选的else
及其后续语句为单语句或大括号包裹块)始终被视为sigle语句本身,所以
{
if(...) {} else {}
}
实际上与
相同if(...) {} else {}