无break不需要判断case吗

来源:6-6 PHP条件结构之switch…case…中的break

慕圣5475749

2017-08-09 19:05

完全就是扯,即使没有break,执行case3的时候不先要判断3是不是num吗?

写回答 关注

2回答

  • 慕粉1720382552
    2017-08-25 02:06:17

    题主这个问题很经典,这其中涉及到编译的问题。事先声明,接下来我的回答都是我的个人理解,肯定会有不准确的表述。

    咱们现在看到的switch结构,一旦经过编译器处理后,指令的顺序就大大不一样了,编译器会把所有的case判断转换成汇编指令放到一起,把分别执行的语句也放到一起,加载到内存中就是两块连续的存储空间,一块放判断,一块放动作。两块怎么联系起来?通过给动作空间进行标号,程序执行时,(注意,这里的汇编指令就是判断+跳转),先判断,一旦判断符合,跳转到相应标号的动作区域执行动作,如果判断不符合,接着下一条判断(判断+跳转)。再说说动作区域的执行,要知道,动作区域的执行也是从上往下一条条顺序执行的,所以,如果相应的动作后面不加break,就会顺序执行下一条动作。我们可以理解成break被转换成一条跳转指令放到了动作区域里,只不过break不需要判断跳转,它是直接跳转,跳转的目的地也是动作区域的一个标号,end,跳出。

    列几个网址,有时间看看。PS,别钻牛角尖。

    http://book.51cto.com/art/201312/421963.htm

    http://blog.csdn.net/lixiangminghate/article/details/71171804?utm_source=gold_browser_extension

    这个很好,注释很完美。

    http://blog.sina.com.cn/s/blog_5526d40f0100orrc.html    这个文章后半段感觉不好,貌似作者自己在弄编译器。


  • decho
    2017-08-09 20:42:54

    首先是判断”num是不是3“而不是判断”3是不是num“
    其次,从实现的角度,一旦任何一个case匹配了,他就会顺序向下执行”后大括号前的所有操作“,而忽略case和default

    慕圣5475...

    谢谢!是有这种情况。比如计算个税的情况确实需要递进

    2017-08-10 17:24:22

    共 3 条回复 >

PHP入门篇

PHP入门教程轻松学习,行业大牛帮您快速掌握PHP编程基础知识。

455957 学习 · 6306 问题

查看课程

相似问题