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);
}