我有几个循环,并希望在使用break或continue指令时指定一个特定的循环
在PHP doc中写道,我可以使用数字数字参数来告诉它有多少嵌套的封闭结构被打破。
$i = 0;
while (++$i) {
switch ($i) {
case 5:
echo "At 5<br />\n";
break 1; /* Exit only the switch. */
case 10:
echo "At 10; quitting<br />\n";
break 2; /* Exit the switch and the while. */
default:
break;
}
}
但是我喜欢这样更友好的东西:
$i = 0;
loop1: // Label/tag of loop1
while (++$i) {
loop2: // Label/tag of loop2
switch ($i) {
case 5:
echo "At 5<br />\n";
break loop2; /* Exit only the switch. */
case 10:
echo "At 10; quitting<br />\n";
break loop1; /* Exit the switch and the while. */
default:
break;
}
}
有可能吗?
答案 0 :(得分:2)
这是不可能的。此外,过多的break
- 语句会使您的代码难以理解且难以理解。您应该重新构建代码以避免breaks
并使用其他control flow statements。
do {
$i += 1;
if($i === 5) {
echo "At 5<br />\n";
} else if ($i === 10) {
echo "At 10; quitting<br />\n";
}
} while($i < 10);
您还可以尝试将代码拆分为不同的函数或方法。
function doSomething($i) {
if($i === 5) {
echo "At 5<br />\n";
} else if ($i === 10) {
echo "At 10; quitting<br />\n";
}
}
function run() {
$i = 0;
while($i < 10) doSomething(++$i);
}
在第二种情况下,您必须了解两个函数之间的强依赖性。如果您要更改run()
以使其计为15,那么doSomething
函数会在$i = 10
时出错。因此,您应该将它们封装在一个类中,或者尝试引入另一个变量,这两个函数可以用来确定循环何时结束。这将避免未来的错误和神奇的事情发生。
function doSomething($i, $max) {
if($i === 5) {
echo "At 5<br />\n";
} else if ($i === $max) {
echo "At 10; quitting<br />\n";
}
}
function run($max) {
$i = 0;
while($i < $max) doSomething(++$i);
}
当然,如果您的代码仍然可读,那么使用一个,两个甚至更多breaks
是没有问题的。但是你应该考虑是否还有其他更优雅的方法来解决你的问题。而且大多数都有更好的方式。
答案 1 :(得分:1)
我的个人建议是将嵌套循环代码提取到单独的方法中和/或使用异常。一般来说,“打破标签”感觉就像“转到”。我不希望你被恐龙吃掉;)
答案 2 :(得分:1)
我不相信这是可能的,但是如果你分解你的代码并将嵌套循环放在一个函数中,你可以使用return
来退出所有循环。这可能会提高可读性。