PHP的流程控制之分支语句
PHP的流程控制之循环语句
4.3.5 流程控制语句
几乎在所有的编程语言中,程序都由3种基本的结构组成,即顺序结构、分支结构和循环结构。
程序是由若干语句组成的,如果程序中语句的执行顺序是从上到下依次逐句执行的,那么这个程序的结构就是顺序结构,在这种结构中没有分支和反复,这也是最简单、最常见的流程结构,这里就不再过多地讨论。
PHP中提供了4条流程控制语句来实现分支结构和循环结构。
①if…else… 条件语句
②switch 分支选择语句
③do…while… 循环语句
④for 循环语句
此外PHP还提供了break语句和continue语句,用以跳出分支结构或循环结构,下面对这些语句逐一进行详细的介绍。
4.3.5.1 分支控制语句
一、if…else…语句
if…else…语句共有3种基本结构,此外每种基本结构还可以嵌套另外两种结构,而且还允许多级嵌套。
1. 只有if的语句
这种结构可以当作单纯的判断,可解释成“若某条件成立则去做什么事情”,其语法如下:
if(expr){
statement
}
其中的expr为判断的条件表达式,通常都为比较表达式或逻辑表达式,而statement表示符合条件时执行的语句,若statement所代表的语句只有一行,可以省略大括号{}。如果expr为真,则执行statement语句或语句体。
2.if…else…语句
这种结构可解释成“若某条件成立则去做什么事情,否则去做另一件事情”,其语法如下:
if(expr){
statement1
}else{
statement2
}
如果expr为真,则执行statement1语句或语句体,否则执行statement2语句或语句体。
3. 包含else if的语句
前面的两种分支结构只能实现二路分支,用包含else if的语句则可以实现多路分支,其语法如下:
if(expr1){
statement1
}
else if(expr2){
statement2
}
else if…
else{
statementn
}
当expr1为真时,执行statement1语句或语句体,否则转入expr2的判断,如果expr2为真,则执行statement2语句或语句体,依此类推,如果所有的expr表达式都不为真,则执行statementn语句或语句体。
程序4-18.php为if…else…语句应用示例.
<!--文件4-18.php:if…else…的应用--> <HTML> <HEAD> <TITLE>if…else…的应用</TITLE> </HEAD> <BODY> <?php //本程序测试时,请更改测试服务器的系统时间查看效果 echo "今天是:".date("D")."<br>"; if (date("D")=="Sat") echo "周末了,我们要去狂欢。<br>"; if (date("D")=="Sat"){ echo "再次声明,周末了,我们要去狂欢,好高兴!<br>"; }else{ echo "今天不是周末,我们要学习PHP 5,多么有意义啊!^_^!!!<br>"; } if (date("D")=="Sun"){ echo "今天是星期天。"; } else if (date("D")=="Mon"){ echo "今天是星期一。"; } else if (date("D")=="Tue"){ echo "今天是星期二。"; } else if (date("D")=="Wed"){ echo "今天是星期三。"; } else if (date("D")=="Thu"){ echo "今天是星期四。"; } else if (date("D")=="Fri"){ echo "今天是星期五。"; } else{ echo "今天是星期六(只可能是星期六了^_^)。"; } ?> </BODY> </HTML>
程序4-18中的tate()函数是格式化服务器的时间函数,date("D")返回服务器时间的星期时间中的英文的前3个字符。当系统时间不为星期六时,其运行结果如图4-14所示.
图4-14 程序4-18.php的运行结果
在上述3种基本结构中,如果在statement语句体中还有if…else…语句,就构成if…else…语句的嵌套。
二、switch语句
嵌套的if…else…语句可以处理多分支流程,但使用起来比较繁琐而且也不太清晰,为此PHP中又引进了switch语句。其语法如下:
switch (expr) {
case expr1:
statement1;
break;
case expr2:
statement2;
break;
┆
┆
default:
statementN;
break;
}
其中的expr为条件,通常是变量名称。而case后的exprN,通常表示变量的值。冒号后则为符合该条件要执行的语句。一定要注意break的作用为退出switch结构,千万不能省略不写。具体使用如程序4-19.php所示。
<!--文件4-19.php:switch的应用--> <HTML> <HEAD> <TITLE>switch的应用</TITLE> </HEAD> <BODY> <?php //本程序测试时,请更改测试服务器的系统时间查看效果 echo "今天是:".date("D")."<br>"; switch (date("D")) { case "Mon": echo "今天星期一"; break; case "Tue": echo "今天星期二"; break; case "Wed": echo "今天星期三"; break; case "Thu": echo "今天星期四"; break; case "Fri": echo "今天星期五"; break; default: echo "今天放假"; break; } ?> </BODY> </HTML>
程序4-19.php的运行效果如图4-15所示。
图4-15 程序4-19.php的运行结果
通过比较,不难发现例4-19.php要比例4-18.php简单一些,最主要的是程序清晰。
4.3.5.2 循环控制语句
一、do…while…语句
在PHP中,do…while…循环语句有两种结构,一种只有while…部分,另一种是do…while…两部分都有。
1. 只有while…部分的语句
其语法如下:
while (expr) {
statement
}
2.do…while…两部分都有的语句
其语法如下:
do {
statement
} while (expr);
其中的expr为判断的条件,通常为逻辑表达式或比较表达式。而statement为符合条件的执行部分程序,若程序只有一行,可以省略大括号{}。
两种结构的区别在于:前者是先判断条件再执行语句,后者是先执行语句再判断条件。对于expr开始为真的情况,两种结构是没有区别的。如果expr开始为假,则前者不执行任何语句就跳出循环,而后者仍要执行一次循环才能跳出循环。
具体使用如程序4-20.php所示。
<!--文件4-20.php:do…while…的应用--> <HTML> <HEAD> <TITLE>do…while…的应用</TITLE> </HEAD> <BODY> <?php //本程序测试时,请将两处$i的初始值改为为4后再测试一次 //观察结果,分析区别 $i=1; while($i<=3){ print $i ; echo ". 以后不敢了<br> "; } echo "第二次……<br>"; $i=1; do{ print $i ; echo ". 以后不敢了<br> "; } while($i<=3) ?> </BODY> </HTML>
由于网页解析的原因,页面无法显示两个加号,同学们在编写代码的时候要注意不要漏写。
其运行效果如图4-16所示。
图4-16 $i初值为1时,程序4-20.php的运行结果
图4-16 $i初值为4时,程序4-20.php的运行结果
当我们把第10行和16行更改为“$i=4;”后,其运行效果如图4-16所示,这样就不难看出两种循环结构的区别了。
二、for语句
for语句仅有单纯的一种,没有其他变化,但同时也是最复杂、功能最强大的循环语句任何while循环和do…while…循环都可以用for循环代替。For语句的语法如下:
for(expr1;expr2;expr3){
statement
}
其中expr1为条件的初始值,expr2为判断的条件,通常都是用比较表达式或逻辑表达式作为判断的条件,expr3为执行statement后要执行的部分,即循环步长,可以用来改变条件,供下次的循环判断,如将循环变量加1、减1等。statement为符合条件后执行的语句或语句体,若statement只有一条语句组成,则可以省略大括号{}。
程序的主体部分可以用for循环改写如下:
<?php
for ($i=1;$i<=3;$i ){
echo $i.". 以后不敢了<br>";
}
?>
当然还可以改写成以下几种形式:
<?php
$i=1;
for (;$i<=10;$i ){
echo $i.". 以后不敢了<br>";
}
?>
(由于网页解析的原因,页面无法显示两个加号,同学们在编写代码的时候要注意不要漏写。)
或
<?php
for ($i=1;;$i ){
if ($i>10) break; //循环标志结束,跳出循环
echo $i.". 以后不敢了<br>";
}
?>
或
<?php
for ($i=1;$i<=10;){
echo $i.". 以后不敢了<br>";
$i ;
}
?>
可以明显地看出用for语句和用while语句的不同。实际应用上中,若循环有初始值,且循环过程中都要累加(或累减),则使用for循环比用while循环好。
由于网页解析的原因,页面无法显示两个加号,同学们在编写代码的时候要注意不要漏写。
4.3.5.3 break和continue语句
在switch和for语句的例子中都用到了break语句,它的作用就是跳出整个switch分支结构或for循环结构,执行其下面的语句。而continue经常用在for或do…while…循环语句中,表示跳出本次循环,继续进入下一次循环。这也是break和continue的主要区别,如程序4-21.php所示。
<!--文件4-21.php:break/continue的应用--> <HTML> <HEAD> <TITLE>break/continue的应用</TITLE> </HEAD> <BODY> <?php echo"使用break的输出效果:<br>"; $i=0; while ($i<10) { if ($i%2==1) { break; } echo $i; $i ; } echo "<br>使用contine的输出效果:<br>"; for($i=0;$i<10;$i ){ if ($i%2){ continue; } echo $i." "; } ?> </BODY> </HTML>
程序4-21.php运行结果如图4-18所示。
图4-18 程序4-21.php的运行结果
PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch。替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。
switch 和第一个 case 之间的任何输出(含空格)将导致语法错误。例如,这样是无效的: <?php switch ($foo): ?> <?php case 1: ?> ... <?php endswitch ?>
看了视频才知道 PHP还提供了break语句和continue语句,用以跳出分支结构或循环结构 非常的实用
在switch和for语句的例子中都用到了break语句,它的作用就是跳出整个switch分支结构或for循环结构,执行其下面的语句。而continue经常用在for或do…while…循环语句中,表示跳出本次循环,继续进入下一次循环。这也是break和continue的主要区别
逻辑性好强,