流程控制对于任何一门编程语言来说都是至关重要的,它提供了控制程序步骤的基本手段,是程序的核心部分。可以说,缺少了控制流程,就不会有程序设计语言,因为现在没有哪一种程序只是线性地执行语句序列。程序中需要与用户相互交流,需要根据用户的输入决定执行序列,需要有循环将代码反复执行等,这些都少不了流程控制。在任何一门程序设计语言中,都需要支持满足程序结构化所需要的三种基本结构:顺序结构、分支结构(选择结构或条件结构)和循环结构。在PHP中,为支持这三种结构,提供了实现这三种结构所需的语句。在程序结构中,最基本的就是顺序结构。顺序结构就是语句按出现的先后次序会按照自上而下的顺序执行,在PHP的程序设计语言中,顺序结构的语句主要是赋值语句、输入/输出语句等。所以对于顺序结构就不必多介绍了。
顺序结构的程序虽然能解决计算、输出等问题,但不能先做判断再选择。对于要先做判断再选择的问题就要使用分支结构,又称为选择结构或条件结构。分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序.分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。分支结构适合于带有逻辑或关系比较等条件判断的计算。即程序在执行过程中依照条件的结果来改变程序执行的顺序。满足条件时执行某一叙述块,反之则执行另一叙述块。在程序中使用分支结构可以有以下几种形式;>单一条件分支结构(if)>双向条件分支结构(else从句)>多向条件分支结构(elseif子句)>巢状条件分支结构(switch语句)以上4种分支结构都是对条件进行判断,根据判断结果,选择执行不同的分支。但是要根据程序的不同需求和不同时机,选择以上不同形式的分支结构使用。每种分支结构都是通过相应的PHP语句来完成的。
条件语句用于在不同条件下执行不同的动作。在PHP中,我们可以使用以下条件语句:1.if语句-如果指定条件为真,则执行代码2.if…else语句-如果条件为true,则执行代码;如果条件为false,则执行另一端代码3.if…elseif….else语句-选择若干段代码块之一来执行4.switch语句-语句多个代码块之一来执行
if-else条件语句
?php
function
getLevel
(
$score
)
{
if
(
$score
=90
)
{
return
"优秀"
;
}
else
if
(
$score
=80
)
{
return
"良好"
;
}
else
{
return
"一般"
;
}
}
echo
getLevel
(
91
)
;
//输出"优秀"
?
switch语句和elseif相似,也是一种多向条件分支结构,但if和elseif语句使用布尔表达式或布尔值作为分支条件来进行分支控制;而switch语句则用于测试一个表达式的值,并根据测试结果选择执行相应的分支程序,从而实现分支控制。switch语句由一个控制表达式和多个case标签组成,case标签后紧跟一个代码块,case标签作为这个代码块的标识。
switch语句的语法格式如下:
switch
(
表达式)
//使用switch关键字,对后面小括号中的表达式求值
{
//switch语句必须由花括号开始
case
值1:
//如果表达式的值和“值!”匹配则执行下面的语句块
语句块1;
//匹配成功则执行的语句块,可以是多条语句
break
;
//break用于退出switch语句
case
值2:
//如果表达式的值和“值2”匹配则执行下面的语句块
语句块2;
//匹配成功则执行的语句块,可以是多条语句
break
;
//break用于退出switch语句
……
//case语句的个数没有规定,可以无限的增加
case
值n:
//如果表达式的值和“值”匹配则执行下面的语句块
语句块n;
//匹配成功则执行的语句块,可以是多条语句
break
;
//break用于退出switch语句
default
:
//它匹配了任何和其他case都不匹配的情况,要放在最后一个ease之后,可以省略
语句块n+1;
//配成功则执行的语句块,可以是多条语句
}
//switch语句必须由花括号结東
这种分支语句的执行是先对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标签后的值相等,这时才处理defant分支中的语句。default标签和if中的else子句一样,它不是switch语句中必需的,可以省略。
switch语句和具有同样表达式的一系列的elseif语句相似,但用switch使程序更清晰,可读性更强。两种多路分支结构的使用时机:如果是通过判断一个“表达式的范围”进行分支处理,就要选择使用一系列的elseif语句,例如上一节中的分时问候就是对小时变量进行范围判断,而采用的elseif语句。但很多场合下需要把同一个“变量(或表达式)与很多不同的值比较”,并根据它等于哪个值来执行不同的代码,这正是switch语句的用途。在switch语句中条件只求值一次并用来和每个case语句比较。在elseif语句中条件会再次求值。如果条件比一个简单的比较要复杂得多或者在一个很多次的循环中,那么用switch语句可能会快一些。在使用switch语句时,还可以在匹配多个值时执行同一个语句块。只要将case中的语句设置为空,最重要的是不要加break语句,这样就将控制转移到了下一个case中的语句。例如,当和值0、1或2任意一个匹配上时,都会执行相同的语句块。如下所示:
?php
$result
=
"一般"
;
function
getLevel
(
$score
)
{
switch
(
intval
(
$score/10
))
{
//intval()可以吧变量转换为int型
case
10:
case
9:
return
"优秀"
;
case
8:
$result
=
"良好"
;
break
;
default
:
$result
=
"一般"
;
break
;
}
return
$result
;
}
echo
$result
;
echo
getLevel
(
91
)
;
?