【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;                                                  
}

执行结果:

目录
相关文章
|
2月前
|
安全 关系型数据库 MySQL
PHP手术麻醉临床信息管理系统源码 术前、术中、术后全流程管理
麻醉文书是用于管理患者手术全过程的文书。 麻醉同意:医院麻醉知情同意书的填写和编辑; 病案查询:可以通过搜索框搜索患者查询病案; 申请手术:手术申请单的填写和打印; 风险评估:医院手术风险评估表的书写和编辑。
40 0
|
7月前
|
关系型数据库 MySQL 应用服务中间件
Mac PHP-Nginx-Mysql 本地开发日常启动流程
Mac PHP-Nginx-Mysql 本地开发日常启动流程
40 1
|
4天前
|
PHP
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
|
4月前
|
关系型数据库 MySQL 数据库
Web 框架 Flask 快速入门(三)数据库-MySQL
数据库 1、数据库的安装与配置 这节用到flask的两个扩展,使用pip安装扩展就行
58 0
|
4月前
|
前端开发 Python
Web 框架 Flask 快速入门(二)表单
🌴 表单 1、表单介绍 当我们在网页上填写账号密码进行登录的时候,就是在填写一个“表单”。web表单是web应用程序种最基本的功能。 2、表单的简单实现 下面的代码实现了这样的功能:
38 0
|
4月前
|
开发框架 Python
Web 框架 Flask 快速入门(一)flask基础与模板
🌴 Flask基础和模板 1、web框架的作用 避免重复造轮子,app程序不必关心于服务器的沟通方式,而专注于核心的业务逻辑实现。 稳定,可扩展性强
43 0
|
4月前
|
安全 关系型数据库 MySQL
【PHP】医院HIS手术麻醉临床信息管理系统源码 实现术前、术中、术后全流程管理
【PHP】医院HIS手术麻醉临床信息管理系统源码 实现术前、术中、术后全流程管理
49 0
|
4月前
|
PHP
ctfshow-web3(伪协议php://input的利用)
ctfshow-web3(伪协议php://input的利用)
39 0
|
5月前
|
PHP
.htaccess web php 文件详解
.htaccess web php 文件详解
22 0
|
6月前
|
前端开发 JavaScript API
php的短信验证的流程,如何实现前端js加后端php
php的短信验证的流程,如何实现前端js加后端php