PHP的流程控制结构
流程控制对于任何一门变成语言都是至关重要的,它提供了控制程序步骤的基本手段,是程序的核心部分。在任何程序设计语言中,都需要支持满足程序结构化所需要的三种基本结构:顺序结构、分之结构和循环结构。在PHP中为支持这三种结构,提供了实现这三种结构所需的语句。在程序结构中,最基本的就是顺序结构。顺序结构就是语句按出现的先后次序按照自上而下的顺序执行。在PHP的程序设计语言中,顺序结构的语句主要是赋值语句、输入输出语句等,所以就不再多介绍顺序结构了。
分支结构
分支结构又称为选择结构或条件结构。分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。分支结构适合于带有逻辑或关系比较等条件判断的计算。
1、单一条件分支结构(if)
if结构是单一条件分支结构,PHP程序中的语句通常是按其所在源代码文件中出现顺序从前到后依次执行的。而if语句用于改变改变语句执行顺序,是包括PHP在内的很多语言最重要的特性之一。if语句的基本格式是对一个表达式进行计算,根据计算结果决定是否执行后面的语句。
1 if(表达式) 2 语句块; 3 4 if(表达式){ 5 语句块1; 6 语句块2; 7 …… 8 语句块n; 9 }
2、双向条件分支结构(else从句)
if语句中也可以包含else子句,经常需要在满足某个条件时执行一条语句,而在不满足该条件时执行其他语句,这正是else子句的功能。else延伸了if语句,可以在if语句中的表达式的值为FALSE时执行语句。这里要注意:else语句是if语句的从句,必须和if一起使用,不能单独使用。
1 if(表达式) 2 语句块; 3 else 4 语句块; 5 6 if(表达式){ 7 语句块1; 8 …… 9 语句块n; 10 }else{ 11 语句块1; 12 …… 13 语句块n; 14 }
3、多向条件分支结构(elseif子句)
elseif子句,是if和else的组合。和else一样,它延伸了if语句,elseif子句会根据不同的表达式值确定执行那个语句块。在PHP中也可以将elseif分开成两个关键“else if”来使用。
1 if(表达式1) 2 语句块1; 3 elseif (表达式2) 4 语句块2; 5 …… 6 elseif (表达式n) 7 语句块n; 8 else 9 语句块n+1;
在elseif语句中同时只能有一个表达式为TRUE,即在elseif语句中只能有一个语句块被执行,即多个elseif从句是排斥关系。使用elseif语句有一条基本规则,总是优先把范围小的条件放在前面处理。
4、多向条件分支结构(switch语句)
switch语句和elseif相似,也是一种多向条件分支结构,但是if和elseif语句使用布尔表达式或布尔值作为分支条件来进行分支控制,而switch语句则用于测试一个表达式的值,并根据测试结果选择执行相应的分支程序,从而实现分支控制。switch语句由一个控制表达式和多个case标签组成,case标签后紧跟一个代码块,case标签作为这个代码块的标识。
1 switch(表达式){ 2 case 值1: 3 语句块1; 4 break; 5 …… 6 case 值n: 7 语句块n; 8 break; 9 default: 10 语句块n+1; 11 }
使用switch语句时应该注意以下几点:
(1)和if语句不同的是,switch语句后面的控制表达式的数据类型只能是整型或字符串,不能使boolean型。通常这个控制表达式是一个变量名称,虽然PHP是弱类型语言,在switch后面控制表达式的变量可以是任意类型数据,但为了保证匹配执行的准确性,最好只是用整型或字符串中的一种类型。
(2)switch语句后面的{}是必须有的。而switch语句中的case标签前后代码块的开始点和结束点非常清晰,因此完全没有必要为case后代码块加{}。
(3)case语句的个数没有规定,可以无限增加,但case标签和case标签后面的值之间应有一个空格,值后面必须有一个冒号。
(4)switch匹配完成以后,将以此逐条执行匹配的分支模块中的语句,直到switch结构结束或者遇到了break语句才停止执行。所以如果一个分支语句后面没有break语句,则程序将继续执行下一个分支语句的内容。
(5)与if语句中的else类似,switch语句中default标签志杰在后面加上一个冒号,看似没有条件,其实是有条件的,条件是表达式的值不能与前面任何一个case标签后的值相等,这时才处理default分支中的语句。
5、巢状条件分支结构
巢状条件分支结构就是if语句的嵌套,即指if或else后面的语句块中又包含了if语句。if语句可以无限层地嵌套在其他if语句中,这给程序的不同部分的条件执行提供了充分的弹性,是程序设计中经常使用的技术。
1 if(表达式1){ 2 if(表达式2){ 3 …… 4 }else{ 5 …… 6 } 7 }else{ 8 if(表达式3){ 9 …… 10 }else{ 11 …… 12 } 13 }