owenzhang的博客

php小细节之switch中的continue

字数统计: 369阅读时长: 1 min
2018/05/04
loading

对于语言中的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?

CATALOG
  1. 1. 小结
  2. 2. 参考