如果满足某个条件,如何退出if
块?
我尝试使用break
,但它不起作用:
if($bla):
$bla = get_bla();
if(empty($bla)) break;
do($bla);
endif;
它说:致命错误:无法打破/继续1级...
答案 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 语句更清晰