0
点赞
收藏
分享

微信扫一扫

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

前言

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

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

使用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;
}

执行结果:

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

注: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) {  
	 case 1:
	 case 2:
		 print("冬季");
		 break;
	 case 3:
	 case 4:
	 case 5:
		 print("春季");
		 break;
	 case 6:
	 case 7:
	 case 8:
		 print("夏季");
		 break;
	 case 9:
	 case 10:
	 case 11:
		 print("秋季");
		 break;
	 case 12:
		 print("冬季");
		 break;			 			 						 							 			 			 
}

执行结果:

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

举报

相关推荐

0 条评论