web-dev-qa-db-ja.com

PHP-IFブロックを終了

特定の条件が満たされた場合、どのようにしてifブロックを終了できますか?

breakを使用してみましたが、動作しません:

if($bla): 
  $bla = get_bla();
  if(empty($bla)) break;
  do($bla);
endif;

それは言います:致命的なエラー:1レベルを中断/継続できません...

20
Alex

なぜそれを好転させないのか。

if($bla): 
  $bla = get_bla();
  if(!empty($bla)) {
    do($bla);
  }
endif;

そのようにすると、$ blaが空でない場合にのみコードが実行されます。

9
Sondre

PHP 5.3では goto を使用できます

if($bla): 
   $bla = get_bla();
   if(empty($bla)) goto end;
   do($bla);
endif;
end:

しかし、個人的にはそれはthatい解決策だと思います。

39
Burak Guzel

Ifステートメントを中断することはできません。forまたはwhileのようなループのみです。

このifが関数内にある場合、「return」を使用します。

13
Oli

私は誰もまだこのソリューションを投稿していないと信じることができません(私のPHPスタイル)で書いてください):

if($bla){do{
  $bla = get_bla();
  if(empty($bla)) break;
  do($bla);
}while(false);}

複雑さはまだO(1)

私にとっては、ブロック内でコードを終了する必要がある場合に備えて、別のifステートメントを気にしない場合にエスケープマーカーを使用すると役立ちます。

$exit = FALSE;

if(!$exit){
    if($data["param1"] == cond1){
        //do something and continue
    }
    else{
        //do something
        $exit = TRUE;
    }
}

if(!$exit){
    if($data["param2"] == cond2){
        //do something and continue
    }
    else{
        //do something
        $exit = TRUE;
    }
}

{...}

各ブロックの周囲に条件ステートメントを配置し続けると、$ exitをtrueに設定した後、他のブロックは実行されません。変数に$ continueという名前を付けて、それがより意味がある場合はその役割を元に戻すことができます。

elseステートメントがなければ簡単に機能します。

$exit = FALSE;

if($bla): 
    $bla = get_bla();
    if(empty($bla)) $exit = TRUE;
    if(!$exit)do($bla);
endif;
2
user3709234

これを試して

do {

    if($bla) {
        $bla = get_bla();

        if (empty($bla)) {
            break;
        }

        do($bla);
    }

    /* You can do more comparisions here */

} while (0);
2
Greeso

できません。

returnができる関数に全部を入れることができます。

それ以外の場合は、ロジックを変更し、別のifブロックを含める必要があります。

if($bla): 
  $bla = get_bla();
  if(!empty($bla)): 
   do($bla);
  endif;
endif;
2
Pekka 웃

条件が単一の変数に対するテストである場合、switchステートメントの方がはるかに優れたソリューションであり、簡単に解決できます。

switch ($var_to_check) { // equivalent to if ($var_to_check==$value_against)
    case $value_against:
        ...
        if ($something_wrong) { break; } // early exit from if
        ...
        break; // regular break
    default: // equivalent to else
        ...
} // end of switch (or if)
... // after the tests

単一のテストチェックに対してのみ機能します。他のifの束を処理できるという利点があります。

0
Jacques Amar

breakできるステートメントが本当に必要な場合は、whileステートメントを使用できます。

while ($bla) {
    $bla = get_bla();

    if (!$bla) {
        break;
    }

    do($bla);

    // Maybe some more code...

    // Do not forget to break out of the while loop!
    break;
}

これは、ネストされた多くのifステートメント(多くの場合は回避できる可能性があります)を回避する良い方法ですが、ループをbreakするように注意してください。

0
Marian

厳密に言うと、if-ブロックを時期尚早に残すことはできませんが、時には本当に必要な場合があります。 breakは、ループおよびswitch- block内でのみ使用できます。しかし、ifをループに入れることはできます。したがって、マルコス・フェルナンデス・ラモスの答えがおそらく最も適切です。ここに少しだけ良いバリアントがあります。

do if ()
{
  ...
  if () break;
  ...
} while (false);
0
guest

IFをWHILEに置き換えて、新しいwhileステートメントの最後にbreak;を追加します。

0