3

知道在 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(); }

简短版本: else 之后的“换行符”是否足以将其与一个“if”语句分开,还是会被视为一个“else if”


编辑我自己的问题以确认我的猜测:

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

4

2 回答 2

4

如果没有大括号,PHP 只会将下一行视为要执行的代码块。

if (myVal == "1")
    doThis();
else 
    if (myVal2 == true)
    doThat();
    else
    doNothing();

If myValis"1" doThis();是下一行,因此被选为要执行的代码块。如果那里有更多代码:

if (myVal == "1")
    doThis();
    doThisToo();

它仍将仅doThis()作为if语句的一部分执行,而doThisToo()始终执行。

如果myVal != "1"它选择else条件中的第一个块并仅执行该块。在这种情况下if,需要评估另一个语句:

if (myVal2 == true)

这个逻辑继续:通过取下一行或由花括号环绕标识的下一个块来标识要执行的下一个代码块。

于 2013-05-09T14:21:01.343 回答
0

我认为您的两个示例结果都完全相同

elseif除非花括号另有说明,否则总是属于前面的。

if(包括可选else的及其后续语句作为单语句或花括号包裹的块)始终被视为单语句本身,因此

{
    if(...) {} else {}
}

实际上是一样的

if(...) {} else {}
于 2013-05-09T14:33:39.610 回答