否则如果是块和大括号

时间:2013-05-09 14:09:57

标签: php if-statement

知道在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”计数。

2 个答案:

答案 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 {}
相关问题