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

执行结果:

目录
相关文章
|
7天前
|
SQL 存储 安全
PHP 与现代 Web 应用的安全挑战与解决方案
随着 Web 应用的发展,PHP 作为一种广泛使用的服务器端脚本语言,面临着越来越复杂的安全挑战。本文探讨了当前 PHP 开发中常见的安全问题,并提供了相应的解决方案,帮助开发者构建更安全可靠的 Web 应用。 【7月更文挑战第8天】
17 1
|
3天前
|
安全 大数据 编译器
PHP 8: 探索新特性及其对现代Web开发的影响
在这篇文章中,我们将深入探讨PHP 8的最新特性,包括JIT编译器、联合类型、匹配表达式等,并分析这些更新如何影响现代Web开发。通过具体示例和代码片段,本文旨在为开发者提供一个清晰的指南,以便更好地利用PHP 8的新功能优化和加速他们的应用程序。
10 2
|
3天前
|
编译器 测试技术 PHP
深入理解PHP 7的新特性及其对现代Web开发的影响
【7月更文挑战第12天】本文将探讨PHP 7版本中引入的关键改进和新增功能,以及这些变化如何优化了性能、提升了代码的可维护性,并促进了现代Web开发的最佳实践。通过具体示例,我们将深入了解这些新特性在日常开发中的应用,以及它们为开发者带来的实际益处。
10 2
|
3天前
|
PHP 开发者
PHP 8 新特性及其对现代Web开发的影响
PHP 8作为最新版本,引入了一系列强大的新特性和改进,这些变化不仅仅是语言本身的提升,更深刻地影响了现代Web开发的方式和效率。本文将深入探讨PHP 8的关键特性,分析其在开发实践中的应用和优势,帮助开发者更好地理解和利用这些新特性。 【7月更文挑战第12天】
9 1
|
7天前
|
安全 编译器 PHP
深入理解PHP 8的新特性及其对现代Web开发的影响
【7月更文挑战第8天】随着PHP 8的发布,这个广受欢迎的服务器端脚本语言迎来了重大更新,带来了性能提升和更现代化的编程特性。本文将探索PHP 8中的新特性,并分析它们如何改变开发者构建和维护Web应用的方式,同时指出这些变化对现有项目升级可能带来的挑战与机遇。
|
10天前
|
设计模式 Rust 安全
深入理解PHP 7的新特性及其对现代Web开发的影响
本文通过数据驱动的分析,探讨了PHP 7的发布如何革新了Web开发的面貌。文章首先概述了PHP 7带来的性能提升与新特性,然后通过实际案例和性能测试数据,详细讨论了这些新特性对提高代码效率、增强安全性和支持现代编程范式的具体影响。最后,文章将评估PHP 7在当前Web开发环境中的地位,并对其未来的发展做出展望。
|
22天前
|
安全 编译器 PHP
探索PHP 8的新特性及其对现代Web开发的影响
【6月更文挑战第22天】随着PHP 8的发布,这一广泛使用的服务器端脚本语言迎来了重大升级。本文将深入探讨PHP 8引入的关键新特性,包括JIT编译器、联合类型、命名参数、匹配表达式以及错误处理和异常改进等。这些新特性不仅提升了性能,还增强了类型系统和语言的表达能力,为现代Web开发带来了新的机遇和挑战。我们将分析这些变化如何影响编码实践,优化策略,并讨论开发者如何适应这些变革以构建更快、更安全、更易于维护的应用程序。
|
16天前
|
安全 编译器 API
探索PHP 8的新特性及其对现代Web开发的影响
随着PHP 8的正式发布,这一版本带来了多项重大改进和新特性,旨在提升性能、增加语言的灵活性并简化开发流程。本文将详细探讨PHP 8中的关键更新,包括JIT编译器、联合类型、命名参数、匹配表达式等,并分析这些新特性如何影响现代Web开发的实践。通过引用最新的性能数据和开发者反馈,我们将深入理解PHP 8带来的变革,以及它对现有项目和未来趋势的潜在影响。
|
16天前
|
安全 大数据 PHP
深入理解PHP 7中的新特性及其对现代Web开发的影响
【6月更文挑战第28天】本文将深入探讨PHP 7带来的革新,从性能提升到语法改进,揭示这些变化如何重塑Web开发领域。我们将一窥未来PHP的发展趋势,并分析开发者如何利用这些新特性来构建更快、更安全、更易于维护的应用程序。
22 1
|
19天前
|
SQL 缓存 PHP
PHP 与数据库优化:提升Web应用性能的关键
在Web开发中,PHP作为一种流行的服务器端脚本语言,与数据库密切相关。本文探讨了如何通过PHP与数据库优化来提升Web应用的性能和响应速度。从数据库查询优化、索引的设计到PHP代码编写的最佳实践,我们将深入探讨每个方面如何影响应用的效率和用户体验。