【web 开发基础】PHP 的流程控制之多向条件分支结构(switch) -PHP 快速入门 (16)

简介: switch语句和elseif相似,也是一种多向条件分支结构,但if和elseif语句使用布尔表达式或布尔值作为分支条件来进行分支控制;而switch语句则用于测试一个表达式的值,并根据测试结果选择执行相应的分支程序,从而实现分支控制.switch语句由一个控制表达式和多个case标签组成,case标签后紧跟一个代码块,case标签作为这个代码块的标识.switch语句的语法格式如下:

前言

switch语句和elseif相似,也是一种多向条件分支结构,但if和elseif语句使用布尔表达式或布尔值作为分支条件来进行分支控制;而switch语句则用于测试一个表达式的值,并根据测试结果选择执行相应的分支程序,从而实现分支控制.switch语句由一个控制表达式和多个case标签组成,case标签后紧跟一个代码块,case标签作为这个代码块的标识.switch语句的语法格式如下:

<?php//使用switch分支结构, 对小括号中的表达式求值switch(表达式) 
{ //switch 语句必须由花括号开始,且必须由花括号结束,在编程中,圆括号(),方括号[],花括号{}一般是成对出现//下面的分支中,表达式的值匹配到哪个就执行下面相应的语句块case值1:
语句块1;
break; //break用于退出switch语句case值2:
语句块2;
break;
case值3:
语句块3;
break;
  ......
case值n:
语句块n;
break;
default:
语句块n+1;
break;
}

使用switch应注意的事项以及switch和if的区别

这种分支语句的执行是先对switch后面括号中的'表达式'求值,然后依次匹配case标签后的值1,值2,...,值n等值,遇到匹配的值即执行对应的执行体;如果所有case标签后的值与"表达式"的值都不相等,则执行default标签后的代码块。在使用switch语句时应该注意以下几点:

  • (1)和if语句不同的是,switch语句后面的控制表达式的数据类型只能是整型或字符串,不能是boolean类型。通常这个控制表达式是一个变量名称,虽然PHP是弱类型语言,在switch后面控制表达式的变量可以是任意的类型的数据,但是,为了保证匹配执行的准确性,最好只使用整型或字符串中的其中一种类型
  • (2)和if语句不同的是,switch语句后面的花括号是必须要有的。而switch语句中各case标签前后代码块的开始点和结束非常清晰,因此完全没有必要为case后的代码块加括号
  • (3)case语句的个数没有规定,可以无限增加。但case标签和case标签后面的值之间应有一个空格,值后面必须有一个冒号,这是语法的一部分
  • (4)switch匹配完成以后,将依次逐条执行匹配的分支模块中的语句,直到switch结构结束或者遇到break语句才停止执行。所以,如果一条分支语句的后面没有写上break语句,则程序将继续执行下一条分支语句的内容。
  • (5)与if语句中的else类似,switch语句中的default标签直接在后面加上一个冒号,看似没有条件,其实是有条件的,条件就是“表达式”的值不能与前面任何一个case标签后的值相等,这事才处理default分支中的语句。default标签和if中的else子句一样,它不是switch语句中必须的,可以省略。

编程实践

下面的两个例子使用两种不同的方法实现同样的功能,即都是通过date()函数获取服务器端时间格式中的星期值,并将其转换为中文的星期值。只是一个用一系列的 elseif 语句,另一个使用switch语句实现同样的功能。

if...elseif...结构:

<?php$week=date("D");
if($week=='Mon'){
echo'星期一';
}elseif($week=='Tue'){
echo'星期二';
}elseif($week=='Wed'){
echo'星期三';
}elseif($week=='Thu'){
echo'星期四';
}elseif($week=='Fri'){
echo'星期五';
}elseif($week=='Sat'){
echo'星期六';
}elseif($week=='Sun'){
echo'星期日';
}

switch结构:

<?php$w=date("D");
switch($w){
case"Mon": echo'星期一'; break;
case"Tue": echo'星期二'; break;
case"Wed": echo'星期三'; break;
case"Thu": echo'星期四'; break;
case"Fri": echo'星期五'; break;
case"Sat": echo'星期六'; break;
case"Sun": echo'星期日'; break;
}

执行结果:

注:switch相当于if== ,要完全匹配值, 不能用于区间判断

可以看到switch语句和具有同样表达式的一系列的elseif语句相似,但用switch使程序更清晰,可读性更强。两种多路分支结构的使用时机:如果是通过判断一个“表达式的范围”进行分支处理,就要选择使用一系列的elseif语句,比如上一节中的分时问候就是对小时变量进行范围判断而采用的elseif语句,但很多场合下需要把同一个“变量”或表达式与很多不同的值进行比较。并根据它等于哪个值来执行不同的代码,这正是switch语句的用途。在switch语句中条件只求值一次并用来和每个case语句比较;而在elseif语句中条件会再次求值,如果条件比一个简单的比较要复杂的多或者在一个很多次循环中,那么用switch语句可能会快一点。

在使用switch语句时,还可以在匹配多个值时执行同一个语句块,只要将case中的语句设置为空即可,最重要的是不要加break语句,这样就将控制转移到下一个case中的语句。比如:当值1和2或3任意一个匹配上时,都会执行相同的语句块。

<?php$month=date("m"); //获取当前月份switch($month) {  
case1:
case2:
print("冬季");
break;
case3:
case4:
case5:
print("春季");
break;
case6:
case7:
case8:
print("夏季");
break;
case9:
case10:
case11:
print("秋季");
break;
case12:
print("冬季");
break;                                                  
}

执行结果:

目录
相关文章
|
9月前
|
安全 关系型数据库 MySQL
PHP手术麻醉临床信息管理系统源码 术前、术中、术后全流程管理
麻醉文书是用于管理患者手术全过程的文书。 麻醉同意:医院麻醉知情同意书的填写和编辑; 病案查询:可以通过搜索框搜索患者查询病案; 申请手术:手术申请单的填写和打印; 风险评估:医院手术风险评估表的书写和编辑。
86 0
|
8月前
|
API 网络架构 开发者
Flask Web开发基础【路由和Jinja2模板引擎】
# Flask Web开发基础 Flask是轻量级Web框架,专注于核心功能:请求响应、模板渲染和URL路由。本文档介绍了使用Flask的基础知识,包括命令行和Python两种运行模式,以及如何修改入口文件、端口和地址。此外,还讨论了URL路由的概念和其在Flask中的实现,展示了动态路由和多URL绑定的例子。最后,提到了Jinja2模板引擎,解释了其基本语法,并通过电影列表案例展示了如何结合Flask使用模板。
80 1
|
5月前
|
前端开发
【前端web入门第五天】01 结构伪类选择器与伪元素选择器
本文介绍了CSS中的结构伪类选择器和伪元素选择器。结构伪类选择器如`nth-child`可根据元素结构关系进行选择,例如将列表中首个`&lt;li&gt;`元素背景设为绿色。伪元素选择器用于创建装饰性内容。
113 8
|
9月前
|
Web App开发 前端开发 JavaScript
网页浏览和编辑DWG快速入门的方法(WEB CAD SDK)
MxDraw云图在线CAD解决方案,包括MxDraw、MxCAD开发包、图纸转换程序和后端服务。支持多种平台和CPU架构,推荐使用最新版Chrome或Edge浏览器。提供AutoCAD各版本dwg格式支持,具备三维和二维编辑功能。提供入门开发指南和功能丰富的示例。用户可下载开发包进行功能演示,包括在线预览和编辑CAD图纸。
网页浏览和编辑DWG快速入门的方法(WEB CAD SDK)
|
8月前
|
JavaScript 程序员 应用服务中间件
快速入门Web开发(上) 黑马程序员JavaWeb开发教程(2)
快速入门Web开发(上) 黑马程序员JavaWeb开发教程(2)
70 7
|
8月前
|
XML 存储 JavaScript
快速入门Web开发(上) 黑马程序员JavaWeb开发教程(1)
快速入门Web开发(上) 黑马程序员JavaWeb开发教程(1)
91 5
|
8月前
|
Java Maven 容器
快速入门Web开发(下)(2)
快速入门Web开发(下)(2)
35 2
|
8月前
|
SQL XML Java
快速入门Web开发(中)后端开发(有重点)(3)
快速入门Web开发(中)后端开发(有重点)(3)
45 1
|
8月前
|
前端开发 JavaScript Java
快速入门Web开发(中)后端开发(有重点)(2)
快速入门Web开发(中)后端开发(有重点)(2)
36 0
快速入门Web开发(中)后端开发(有重点)(2)
|
8月前
|
API 数据库 数据库管理
Flask Web开发基础:数据库与ORM实战
该文介绍了如何使用 Flask、SQLAlchemy 和 SQLite 实现数据库操作。首先,通过创建虚拟环境和安装 flask-sqlalchemy(版本2.5.1)及 sqlalchemy(版本1.4.47)来设置环境。接着,配置数据库URI,定义User和Movie模型类表示数据库表,并通过db.create_all()创建表。文章还展示了如何插入、查询、更新和删除记录,强调了db.session.commit()在保存更改中的关键作用。查询涉及filter、order_by等方法,提供了一系列示例。
361 1