对于语言中的continue,大家都不陌生,是停止当前行的操作,继续下次循环。例如下面的C语言代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include <stdio.h> int main() { int i; for(i = 1; i < 4; ++i) { switch (i) { case 1: printf(" %d in case\n", i); break; case 2: printf(" %d in case\n", i); continue; default: printf(" %d in default\n", i); break; } printf("%d over for \n", i); } return 0; }
|
执行结果
1 in case
1 over for
2 in case
3 in default
3 over for
在case 2里遇到continue后直接跳出switch进行下一个循环,和我们平时的理解是一样的。但是在php里的时间就比较诡异了, swicth里的continue和break是相同的 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <?php for($i = 1; $i < 4; ++$i) { switch ($i) { case 1: echo "$i in case\n"; break; case 2: echo "$i in case\n"; continue; default: echo "$i in default\n"; break; } echo "$i over for \n"; } ?>
|
运行结果
1 in case
1 over for
2 in case
2 over for
3 in default
3 over for
小结
在php里switch中continue和break的实现是一样的,不要用其他语言的思维来思考,要多注意,否则会触发bug。
估计是设计php的时候没有参照其他语言的标准来实现,在新版本也没有修改,可能会导致老代码运行异常。
这个细节增加了大家学习php语言的负担,虽然不大,要专门记住。
参考
Should I ever use continue inside a switch statement?