导读
PHP的continue一般在循环中直接跳过后续的代码,直接进入下一次循环,break用来跳出循环,或者在switch的时候在某个case执行完后跳出,防止执行后续其他的case.
在continue和break后面还可以带数字,实际上没带数字的时候有一个默认值,1,如果带了数字n,那么continue的话就表示跳过n层循环(注意,是层),如果是break的话,就表示终止n层循环.
验证
在php的官网上,有这么一段验证代码:
<?php
echo "XXXX";
for( $i = 0; $i < 3; ++ $i )
{
echo ' [', $i, '] ';
switch( $i )
{
case 0: echo 'zero'; break;
case 1: echo 'one' ; XXXX;
case 2: echo 'two' ; break;
}
echo ' <' , $i, '> ';
}
在xxxx的地方依次填入break,break 2, continue 和continue2,看看是什么结果
结果
结果依次是:
break 1 [0] zero <0> [1] one <1> [2] two <2>
break 2 [0] zero <0> [1] one
continue 1 [0] zero <0> [1] one <1> [2] two <2>
continue 2 [0] zero <0> [1] one [2] two <2>
解析
当 XXXX 为 break 1
即break的时候,很容易看出结果,依次循环,在对应的case执行完毕后跳出switch.当 XXXX 为 break 2
第一次循环正常进行,当进入循环的第二次时,进入case 1,在执行break 2后, 终止两层循环,第一层的switch虽然不是循环,但被break直接终止,第二次的break就作用于上一层的for循环了,在for循环中break,就终止循环了,所以最终的结果只循环了两次,而且第二次最后面的$i(值为1)也没能输出当 XXXX 为 continue 1
即continue时,让我们疑惑的是在switch中的continue表示什么,结果表明,switch中的continue 1和break 1 一个效果,执行了continue 1就直接终止后续的case判断执行了.当 XXXX 为 continue 2
第二次循环执行了case 1, 在echo "one"后,continue 2首先是终止后续的case,然后对外层for作用了continue, 所以就直接进入了下一次循环,完成了case为2的输出.
注意
那么假如在n层循环中执行了break m(m>n)或者continue m(m>n)时,会是怎么样的呢,比如单层循环体中执行了break 2或者continue 2.
在这里还是要强调,break和continue作用的是循环体的层数(switch算一层),如果这样执行的话,会直接抛出一个fatal error, 提示break或者continue超出层数了.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。