PHP-退出IF块

PHP-退出IF块,php,if-statement,conditional,exit,Php,If Statement,Conditional,Exit,如果满足特定条件,如何退出if块 我尝试使用break,但不起作用: if($bla): $bla = get_bla(); if(empty($bla)) break; do($bla); endif; 它说:致命错误:无法在…中中断/继续1级。您不能中断if语句,只能中断for或while之类的循环 如果函数中有此项,请使用“return”。您不能 您可以将整个内容放入一个函数中,从该函数中可以返回 否则,您将不得不更改逻辑并包含另一个if块 if($bla): $bl

如果满足特定条件,如何退出
if

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

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

它说:致命错误:无法在…中中断/继续1级。

您不能中断if语句,只能中断for或while之类的循环

如果函数中有此项,请使用“return”。

您不能

您可以将整个内容放入一个函数中,从该函数中可以
返回

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

if($bla): 
  $bla = get_bla();
  if(!empty($bla)): 
   do($bla);
  endif;
endif;
在PHP5.3中,您可以使用


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

为什么不扭转局面呢

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

这样,只有在$bla不为空时,它才会运行您的代码。。这就是if语句的要点

我不敢相信还没有人发布这个解决方案(用我的PHP风格编写):


复杂性仍然是O(1)

对于我来说,如果您不介意在另一个块中使用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;

严格地说,如果-block过早,我们不能离开
,但有时确实需要它<代码>中断
只能在循环和
开关
-块内使用。但是我们可以将
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);

如果您确实想要一个可以从中
中断的语句,可以使用
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
语句(在许多情况下都可以避免)的一个好方法,但一定要小心
中断循环。

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

它仅适用于单个测试检查。具有处理大量其他IF的优势。

只需将IF替换为WHILE并添加
break位于新while语句的末尾和中间的任何位置。

您可以为IF块的内容创建一个函数。 比如说

if($bla): 
  doSomething();
endif;
然后您可以简单地使用RETURN

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

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

你的答案解决了问题,但没有回答“我如何才能退出IF块”的问题,值得注意的是,如果可能的话。@rahmanisback就像你说的,它解决了问题,所以我真的看不出我的答案有什么问题。如果你只往下看一个答案,你就会发现这个问题得到了回答。当我发布我的答案时,已经有好几个帖子在回答这个问题,所以我所做的就是提供一个实际的解决方案。你不能破坏if语句,如果你需要这样做,你就用错了。它解决了我的问题!我也在做同样的事情,试图在可以重新安排的时候退出。我认为实际回答这个问题是有好处的,但如果这个问题使用了不恰当的方法或不实用,就应该注意。谢谢为什么很丑?这在某些情况下肯定是有用的。投票!我可以问一下,为什么PHP背后的人在2009年推出了它?他们本可以选择根本不引入它。我同意我觉得它很像DOS(不是很好),但它肯定会派上用场。它仍然有一个目的,例如退出嵌套循环。检查更多的意见(:哇。但它仍然完全反常…我们可以随意使用,我们甚至可以使用include()然后从那里回来,但我们不能离开if区。。。
if($bla): 
  doSomething();
endif;
function doSomething() {
    $bla = get_bla();
    if(empty($bla)) return;
    do($bla);
}