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.