有没有办法像if
循环一样打破while
语句?
while(true) {
break;
}
if(true) {
//break if
} else {
//continue execution here or miss if at all
}
答案 0 :(得分:0)
是的,使用goto
。谨慎使用,因为它通常表明其他地方的代码习惯不良。它确实有合法的用途(比如打破嵌套循环)。
http://php.net/manual/en/control-structures.goto.php
我认为你的问题措辞不合理。我认为这是你遇到的问题:
if( foo ) {
if( bar ) {
baz();
} else {
qux();
}
} else {
qux();
}
您希望简化此操作,以便qux()
只需要表达一次,而不是两次。存在使用goto
的可能解决方案:
if( foo ) {
if( bar ) {
baz();
} else {
goto quxLabel;
}
} else {
quxLabel:
qux();
}
这样可行,但我认为更好的解决方案(如果可能,在您的情况下)是组成您的分支条件。这要求您能够独立于bar
评估foo
,因此我不知道这是否适用于您的情况:
if( foo && bar ) baz();
else qux();
如果bar
取决于foo
,那么您仍然可以使用此技术,但可以利用&&
运算符的短路行为:
if( foo && computeBar( foo ) ) baz();
else qux();
答案 1 :(得分:0)
简单地说,颠倒顺序并使用!
:
<?php
if(!true){
echo "execution here or miss if at all";
} else {
echo "Nothing";
}
答案 2 :(得分:0)
if
- 语句用于分支代码而不重复,因此不需要break
构造函数。当您使用loop
控制语句时,情况会有所不同,特别是那些没有给定循环条件语句的控制语句,如:
while (1==1) {
...
}
为了避免无限循环,你需要结合分支和循环语句,也许这就是你的问题背后的想法:
while (1==1) {
// do stuff
...
// special condition
if ($cancel) {
break;
}
}
答案 3 :(得分:-2)
if(true){
goto end;
}
else {
continue execution here or miss if at all
}
end:
/* your statement*/
答案 4 :(得分:-2)
try {
if (...) {
do_something();
...
throw new \Exception(); // Break here
...
}
} catch (\Exception $e) {}
// Resumes here:
do_something_now()
使用异常通常是打破循环(或其他任何东西)的最佳方法。它们用于表示错误,但可以随时随地捕获和处理。