流程控制对于任何一门编程语言来说都是具有通用与普遍性的,是程序的重要组成部分。可以这么说,在任何一门程序设计语言中,都需要支持三种基本结构:顺序结构、分支结构(选择结构或条件结构)和循环结构。对于顺序结构,主要是赋值语句和输入/输出语句等,即按次序执行,这里没什么好说的。这里,笔者重点总结一下分支结构和循环结构。
分支结构
分支结构是程序在执行过程中依照需求条件来改变程序执行的顺序。即满足条件时就执行某一叙述块,反之则执行另一叙述块。在程序中使用分支结构可以有以下几种形式:
单一条件分支结构
双向条件分支结构
多向条件分支结构
巢状条件分支结构
单一条件分支
if结构是单一条件分支结构,if语句的基本格式是对一个表达式进行计算,根据计算结果决定是否执行后面的语句。if后面小括号中的“表达式”就是执行的条件,条件返回的结果只能是布尔型值。其通常是由比较运算符或者逻辑运算符组成的表达式所计算的结果值,或是一些返回布尔型的函数等。如果是传入其他类型的值,也会自动转换为布尔型的TRUE或FALSE。如果表达式为TRUE,则执行代码块,否则不执行。
Demo
<?php $x = 10; //定义一个整型变量$x,值为10 $y = 20; //定义一个整型变量$y,值为20 if ( $x < $y ) { //$x是小于$y的,所以执行下面语句块 $t = $x ; //先将$x的值放到临时的变量$t中 $x = $y ; //再将变量$y的值赋给变量$a $y = $t ; //再将临时变量$t中的值赋给变量$y } //语句块结束的花括号 var_dump($x > $y ); //两个变量的值已经交换,输出true echo $x." ".$y;?>
双向条件分支
双向条件分支好比if语句中也可以包含else子句,其意思是需要在满足某个条件时执行一条语句,而在不满足该条件时执行其他语句,这正是else子句的功能。else延伸了if语句,可以在if语句中的表达式的值为FALSE时执行语句。值得注意的是,else语句是if语句的从句,必须和if一起使用,不能单独存在。
Demo
<?php $x = 30; $y = 20; if( $x > $y ) { echo "变量\$x 大于变量 \$y <br>"; //判断的条件成立,此句会执行 } else { echo "变量\$x 小于变量 \$y <br>"; //判断的条件不成立,此句会被执行 } echo "变量\$x和变量\$y比较完毕 "; ?>
多向条件分支
elseif子句是典型的多向条件分支,它延伸了if语句,elseif子句会根据不同的表达式值确定执行哪个语句块。在PHP中也可以将elseif分开成两个关键字else if来使用。其执行顺序是如果表达式l为TRUE,则执行代码块1语句;如果判断表达式2为TRUE,则执行代码块2语句;以此类推,判断第n个表达式为TRUE,则执行代码块n语句;如果表达式的条件都不为TRUE,则执行else子语中的代码块n+l语句,当然最后的else语句也可以省略。
Demo
<?php $week = date("D"); //获取当前的星期值,如Mon、Tue、Wed等 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语句和elseif相似,也是一种多向条件分支结构,但if和elseif语句使用布尔表达式或布尔值作为分支条件来进行分支控制;而switch语句则用于测试一个表达式的值,并根据测试结果选择执行相应的分支程序,从而实现分支控制。switch语句由一个选择表达式和多个case标签组成,case标签后紧接着一段代码块。在使用switch语句时应该注意以下几点:
switch语句后面的选择表达式的数据类型只能是整型或字符串,不能是boolean型。通常这个控制表达式是一个变量名称。
switch语句后面的花括号是必须有的。
case语句的个数没有规定,可以无限增加。但case标签和其后面的值之间应有一个空格,值后面必须有一个冒号,这是语法的一部分。
switch匹配完成以后,将依次逐条执行匹配的分支模块中的语句,直到switch结构结束或者遇到了break语句才停止执行。
switch语句中default标签直接在后面加上一个冒号,其意思是是表达式的值不能与前面任何一个case标签后的值相等,这时才执行default分支中的语句。default标签可以省略。
Demo
<?php $week = date("D"); switch( $week ) { 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; } ?>
巢状条件分支
巢状式条件分支结构就是if语句的嵌套,即指if或else后面的代码块中又包含if语句。
Demo
<?php $sex = "male"; //用户输入的性别 $age = 25; //用户输入的年龄 if ( $sex == "male" ) { //如果用户输入的是男性则执行下面的区块 if ( $age >= 60 ) { //如果是男性并且年龄在60以上则执行下面的区块 echo "这个先生已退休".($age-60)."年了"; } else { //如果是男性并且年龄在60以下则执行下面的区块 echo "这个先生在工作,还有".(60-$age)."年才能退休"; } } else { //如果用户输入的是女性则执行下面的区块 if( $age >= 55 ) { //如果是女性并且年龄在55以上则执行下面区块 echo "这个女士已退休".($age-55)."年了"; } else { //如果是女性并且年龄在55以下则执行下面区块 echo "这个女士在工作,还有".(55-$age)."年才能退休"; } } ?>