1

导读

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>

解析

  1. 当 XXXX 为 break 1
    break的时候,很容易看出结果,依次循环,在对应的case执行完毕后跳出switch.

  2. 当 XXXX 为 break 2
    第一次循环正常进行,当进入循环的第二次时,进入case 1,在执行break 2后, 终止两层循环,第一层的switch虽然不是循环,但被break直接终止,第二次的break就作用于上一层的for循环了,在for循环中break,就终止循环了,所以最终的结果只循环了两次,而且第二次最后面的$i(值为1)也没能输出

  3. 当 XXXX 为 continue 1
    continue时,让我们疑惑的是在switch中的continue表示什么,结果表明,switch中的continue 1break 1 一个效果,执行了continue 1就直接终止后续的case判断执行了. 

  4. 当 XXXX 为 continue 2
    第二次循环执行了case 1, 在echo "one"后,continue 2首先是终止后续的case,然后对外层for作用了continue, 所以就直接进入了下一次循环,完成了case2的输出.

注意

那么假如在n层循环中执行了break m(m>n)或者continue m(m>n)时,会是怎么样的呢,比如单层循环体中执行了break 2或者continue 2

在这里还是要强调,breakcontinue作用的是循环体的层数(switch算一层),如果这样执行的话,会直接抛出一个fatal error, 提示break或者continue超出层数了.


Yi_Zhi_Yu
1.9k 声望69 粉丝

PHPer,Sphinxer,Giter,Sheller,Pythoner