特定の条件が満たされた場合、どのようにしてif
ブロックを終了できますか?
break
を使用してみましたが、動作しません:
if($bla):
$bla = get_bla();
if(empty($bla)) break;
do($bla);
endif;
それは言います:致命的なエラー:1レベルを中断/継続できません...
なぜそれを好転させないのか。
if($bla):
$bla = get_bla();
if(!empty($bla)) {
do($bla);
}
endif;
そのようにすると、$ blaが空でない場合にのみコードが実行されます。
PHP 5.3では goto を使用できます
if($bla):
$bla = get_bla();
if(empty($bla)) goto end;
do($bla);
endif;
end:
しかし、個人的にはそれはthatい解決策だと思います。
Ifステートメントを中断することはできません。forまたはwhileのようなループのみです。
このifが関数内にある場合、「return」を使用します。
私は誰もまだこのソリューションを投稿していないと信じることができません(私の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;
これを試して
do {
if($bla) {
$bla = get_bla();
if (empty($bla)) {
break;
}
do($bla);
}
/* You can do more comparisions here */
} while (0);
できません。
return
ができる関数に全部を入れることができます。
それ以外の場合は、ロジックを変更し、別のifブロックを含める必要があります。
if($bla):
$bla = get_bla();
if(!empty($bla)):
do($bla);
endif;
endif;
条件が単一の変数に対するテストである場合、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の束を処理できるという利点があります。
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
するように注意してください。
厳密に言うと、if
-ブロックを時期尚早に残すことはできませんが、時には本当に必要な場合があります。 break
は、ループおよびswitch
- block内でのみ使用できます。しかし、if
をループに入れることはできます。したがって、マルコス・フェルナンデス・ラモスの答えがおそらく最も適切です。ここに少しだけ良いバリアントがあります。
do if ()
{
...
if () break;
...
} while (false);
IFをWHILEに置き換えて、新しいwhileステートメントの最後にbreak;
を追加します。