3

PHP では、次のように、「if」、「else if」、または「else」タグの後に関数 / 行が 1 つだけある条件付きブロックの中括弧を無視できることを知っています。

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

短いバージョン: 1 つの「if」ステートメントからそれを分離するのに十分な「改行」がありますか、それとも 1 つの「else if」と見なされますか?


自分の質問を編集して、推測について確認する:

if(false)
  echo "1";
else 
  if (false)
    echo "2";
else
  echo "3";

2つのelseステートメントが見つかったため、次のエラーがスローされている間に「3」が表示されます:

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()の一部としてのみ実行されますが、常に実行されます。ifdoThisToo()

myVal != "1"条件の最初のブロックを選択し、それelseのみを実行する場合。この場合、if評価する必要があるのは別のステートメントです。

if (myVal2 == true)

このロジックは続きます。次の行または中かっこで囲まれた次のブロックを取得して、実行するコードの次のブロックを識別します。

于 2013-05-09T14:21:01.343 に答える