PHP - выход из блока IF
Как я могу выйти из блока if
, если выполнено определенное условие?
Я попытался использовать break
, но он не работает:
if($bla):
$bla = get_bla();
if(empty($bla)) break;
do($bla);
endif;
он говорит: Неустранимая ошибка: не удается сломать/продолжить 1 уровень в...
Ответы
Ответ 1
Почему бы просто не развернуть его.
if($bla):
$bla = get_bla();
if(!empty($bla)) {
do($bla);
}
endif;
Таким образом, он будет запускать ваш код только в том случае, если $bla не является пустым.. Это своего рода точка с if-statements
Ответ 2
В PHP 5.3 вы можете использовать goto
if($bla):
$bla = get_bla();
if(empty($bla)) goto end;
do($bla);
endif;
end:
Но лично я считаю, что уродливое решение.
Ответ 3
Вы не можете сломать, если операторы, только петли, например, или пока.
Если это, если находится в функции, используйте "return".
Ответ 4
Я не могу поверить, что никто еще не опубликовал это решение (написав его в моем стиле PHP):
if($bla){do{
$bla = get_bla();
if(empty($bla)) break;
do($bla);
}while(false);}
Сложность все еще O (1)
Ответ 5
Вы не можете.
Вы можете поместить все это в функцию, из которой вы можете return
.
В противном случае вам придется изменить логику и включить другой блок if.
if($bla):
$bla = get_bla();
if(!empty($bla)):
do($bla);
endif;
endif;
Ответ 6
Для меня это помогает иметь маркер побега в случае, если код должен выйти из блока, если вы не против иметь оператор 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 и вернуть ее роли, если это имеет для вас больше смысла.
он работает проще, если у вас нет других операторов.
$exit = FALSE;
if($bla):
$bla = get_bla();
if(empty($bla)) $exit = TRUE;
if(!$exit)do($bla);
endif;
Ответ 7
Строго говоря, мы не можем оставить if
-блока преждевременно, но иногда это действительно необходимо. break
можно использовать только внутри петель и switch
-block. Но мы можем разместить if
в цикле. Таким образом, ответ Маркоса Фернандеса Рамоса, вероятно, наиболее уместен. Вот только немного более приятный вариант.
do if ()
{
...
if () break;
...
} while (false);
Ответ 8
Попробуйте это
do {
if($bla) {
$bla = get_bla();
if (empty($bla)) {
break;
}
do($bla);
}
/* You can do more comparisions here */
} while (0);
Ответ 9
Если вам действительно нужна инструкция, из которой вы можете 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
циклом.
Ответ 10
Если ваше условие является испытанием против одной переменной, то оператор 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
Он работает только для однократных проверок. Имеет преимущество обработки кучу else ifs.