文档章节

php中switch语句执行的过程

l
 lgx123
发布于 2016/05/11 13:45
字数 934
阅读 32
收藏 0

    switch语句大家都很熟悉,各种书籍都会提及到它,但是大多数书中只给出了它的大概执行流程,有一些特殊的情况和具体的细节在书中并没有详细介绍。最近重看php语法的时候,实验了一些特殊的情况,虽然在实际的编程中不会这样写(这样写代码应该会被骂死),但是可以加深对switch语句的理解。

   声明: 这里的例子只是在php中实验过,其他语言的结果不一定和这里的一样。

    w3school上对switch的工作原理解释如下:

  1. 对表达式(通常是变量)进行一次计算
  2. 把表达式的值与结构中 case 的值进行比较
  3. 如果存在匹配,则执行与 case 关联的代码
  4. 代码执行后,break 语句阻止代码跳入下一个 case 中继续执行
  5. 如果没有 case 为真,则使用 default 语句

   工作原理解释 出自:http://www.w3school.com.cn/php/php_switch.asp

 

细节1:

    当把default语句放在case语句中间,而不是所有case语句的最后时,比较到default语句后,会不会直接执行default语句,还是跳过default语句比较接下来的case的值?例子如下:

$num = 2;
switch($num)
{
    case 1:
        echo 1;
        break;
    default:
        echo 0;
        break;
    case 2:
        echo 2;
        break;
}

本例的结果是输出 2 ,说明表达式的值与case的值进行比较的阶段,会自动跳过default语句。

具体的流程是:$num与1比较,结果为false;然后$num与2比较,结果为true,执行echo 2和break这两条语句。

 

 

细节2:

    由细节1可以知道比较case值的时候会跳过default语句,那比较某个case值后结果为true,但是该case语句中没有break语句的时候(原理上是会一直执行,直到遇到break或者switch语句结束),会不会也跳过default语句呢?例子如下:

$num = 1;
    switch($num)
    {
        case 1:
            echo 1;
        default:
            echo 0;
        case 2:
            echo 2;
    }

本例的结果是输出 102 ,说明这种情况下,default语句不会被跳过。

具体的流程是:$num与1比较,结果为true。执行echo 1,该case语句中没有break语句,所以继续执行下去,执行default中的echo 0,default中也没有break语句,所以继续执行case 2中的echo 2 。 

由这个例子外面也可以知道,当default语句在case语句中间,default语句中没有break语句的时候,也会继续执行接下来的语句(echo 2)。

 

细节3:

    当有两个以上的case的值一样时,会执行哪一个case语句,还是会报错?例子如下:

    $num = 1;
    switch($num)
    {
        case 1+0:
            echo "1+0";
            break;
        default:
            echo 0;
            break;
        case 1:
            echo 1;
            break;
        case 0+1:
            echo "0+1";
            break;
    }

本例的结果是输出  1+0,说明有两个以上的case的值一样时,不会报错,而且会按照正常的方法进行一个一个的比较,在最前面的case语句会被最先匹配,所以会被执行。

具体的流程是:$num与1+0比较,结果为true。执行echo "1+0"和break语句。

 

 

 

© 著作权归作者所有

共有 人打赏支持
l
粉丝 0
博文 3
码字总数 2104
作品 0
广州
PHP之新手自学基础知识(二)——语法篇

1.PHP If...Else 语句 条件语句的三种情况: ● if 语句 - 在条件成立时执行代码 ● if...else 语句 - 在条件成立时执行一块代码,条件不成立时执行另一块代码 ● if...elseif....else 语句 ...

天谴残魂
01/04
0
0
php第二天补充

1.在函数中用return将返回值传递给调用者。在全局作用域中使用return,则中止脚本运行。 2.变量函数,实际上就是将函数名付给一个变量$func,之后变量后加一个括号就代表调用了原来的函数 fu...

qqmsnicq2012
2014/05/14
0
0
复习PHP-语言参考-流程控制

1.任何 PHP 脚本都是由一系列语句构成的。一条语句可以是一个赋值语句,一个函数调用,一个循环,一个条件语句或者甚至是一个什么也不做的语句(空语句)。语句通常以分号结束。此外,还可以...

qzd1989
2014/04/23
0
0
PHP(五)条件分支和顺序流程

PHP脚本有一系列语句构成。一条语句可以是一个赋值语句、一个函数调用、一个循环、一个条件语句甚至是一个什么也不是的语句(空语句)。语句通常以分号结束。程序在执行的时候,从上往下执行...

ChuckleLiu
2015/12/22
88
0
《从零开始学Swift》学习笔记(Day 18)——有几个分支语句?

原创文章,欢迎转载。转载请注明:关东升的博客 分支语句又称条件语句,Swift编程语言提供了if、switch和guard三种分支语句。 if语句 由if语句引导的选择结构有if结构、if-else结构和else-if...

智捷课堂
2015/09/28
32
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
0
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
0
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
2
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部