PHP - 退出IF块

时间:2010-12-28 11:43:02

标签: php if-statement conditional exit

如果满足某个条件,如何退出if块?

我尝试使用break,但它不起作用:

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

它说:致命错误:无法打破/继续1级...

12 个答案:

答案 0 :(得分:39)

在PHP 5.3中,您可以使用goto

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

但我个人认为这是一个丑陋的解决方案。

答案 1 :(得分:13)

你不能打破if语句,只能像for或while那样循环。

如果这个if在函数中,请使用'return'。

答案 2 :(得分:8)

为什么不把它转过来。

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

这样它只会在$ bla不为空的情况下运行你的代码..这就是if-statements的重点

答案 3 :(得分:3)

我无法相信没有人发布过这个解决方案(以我的PHP风格编写):

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

复杂性仍然是O(1)

答案 4 :(得分:2)

你做不到。

你可以把整个事情放到一个函数中,你可以return

否则,您将不得不更改逻辑并包含另一个if块。

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

答案 5 :(得分:2)

对我而言,如果您不介意在另一个代码中使用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;

答案 6 :(得分:1)

试试这个

do {

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

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

        do($bla);
    }

    /* You can do more comparisions here */

} while (0);

答案 7 :(得分:0)

严格地说,我们不能过早地阻止if - 阻止,但有时真的需要它。 break只能在循环内部使用switch - 阻止。但我们可以将if置于循环中。因此,Marcos Fernandez Ramos的回答可能是最合适的。这是一个稍微好一点的变种。

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

答案 8 :(得分: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循环。

答案 9 :(得分:0)

如果您的条件是对单个变量的测试,那么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的优势。

答案 10 :(得分:0)

只需将WIFLE替换为IF,并在新的while语句的末尾以及中间的任何位置添加break;

答案 11 :(得分:0)

您可以为 IF 块的包含创建一个函数。 例如

if($bla): 
  doSomething();
endif;

然后你可以简单地使用 RETURN

function doSomething() {
    $bla = get_bla();
    if(empty($bla)) return;
    do($bla);
}

它看起来比乘以 IF 语句更清晰