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

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

19 голосов
/ 28 декабря 2010

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

Я пытался использовать break, но это не работает:

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

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

Ответы [ 11 ]

39 голосов
/ 28 декабря 2010

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

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

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

13 голосов
/ 28 декабря 2010

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

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

9 голосов
/ 28 декабря 2010

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

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

Таким образом, он будет запускать ваш код только в том случае, если $ bla не пусто.

3 голосов
/ 20 декабря 2013

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

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

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

2 голосов
/ 18 января 2016

Попробуйте это

do {

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

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

        do($bla);
    }

    /* You can do more comparisions here */

} while (0);
2 голосов
/ 05 июня 2014

Для меня полезно иметь 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;
2 голосов
/ 28 декабря 2010

Вы не можете.

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

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

if($bla): 
  $bla = get_bla();
  if(!empty($bla)): 
   do($bla);
  endif;
endif;
0 голосов
/ 11 марта 2019

Просто замените IF на WHILE и добавьте break; в конце нового оператора while и где-нибудь посередине.

0 голосов
/ 15 мая 2017

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

0 голосов
/ 03 марта 2017

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

...