PHP-выход из блока IF

как я могу выйти из if блок, если выполняется определенное условие?

Я попытался с помощью break но это не работает:

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

Он говорит: фатальная ошибка:не удается сломать / продолжить 1 уровень...

10 ответов


почему бы просто не повернуть его вокруг.

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

таким образом, он будет запускать ваш код, только если $bla не пуст.. В этом смысл, если-заявления


в PHP 5.3 вы можете использовать перейти

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

но лично я думаю, что это уродливое решение.


вы не можете сломать операторы if, только циклы, такие как for или while.

Если это if находится в функции, используйте 'return'.


Я не могу поверить, что никто еще не опубликовал это решение (написав его в моем стиле PHP):

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

сложность еще O (1)


вы не можете.

Вы можете поместить все это в функцию, из которой вы можете return.

в противном случае вам придется изменить логику и включить другой блок if.

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

для меня это помогает иметь маркер escape в случае, если код должен выйти между блоками, если вы не возражаете иметь оператор 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;

строго говоря, мы не можем оставить if-блок преждевременно, но иногда это действительно необходимо. break можно использовать только внутри петель и switch-блок. Но мы можем разместить if в цикле. Таким образом, ответ Маркоса Фернандеса Рамоса, вероятно, самый подходящий. Вот только чуть более приятный вариант.

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

попробуй такое

do {

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

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

        do($bla);
    }

    /* You can do more comparisions here */

} while (0);

если вы действительно хотите заявление, из которого можно 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 петлю.


если ваше условие является тестом против одной переменной, то оператор 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

он работает только для одиночных проверок теста. Имеет преимущество обработки кучу других ifs.