在任何一门设计语言中,都需要支持满足程序结构化所需要的三种基本结构、顺序结构、分支结构(选择结构或条件结构)和循环结构。
最基本的是循序结构。顺序结构就是语句按出现的先后次序顺序执行。在PHP的程序设计语言中,顺序结构的语句主要是赋值语句、输入/输出语句等,所以对于顺序结构就不必过多介绍了。
1. 分支结构
在程序中使用分支结构可以有以下几种形式:
- 单一条件分支结构
- 双向条件分支结构
- 多向条件分支结构
- 巢状条件分支结构
1.1 单一条件分支结构(if)
if语句的格式如下:
if(表达式)
语句块;
if(表达式){
语句块;
}
1.2 双向条件结构分支(else子句)
if(表达式){
语句块1;
}else{
语句块2;
}
1.3 多向条件分支结构(elseif子句)
if(表达式){
语句块1;
}
elseif{
语句块2;
}
……
elseif{
语句块n;
}
else{
语句块n+1;
}
1.4 多向条件分支结构(switch语句)
switch(表达式) //使用switch关键字,先对后面小括号中的表达式求值,然后结果匹配哪个值就执行哪个case语句
{
case 值1:
语句块1;
break;
case 值2: //和值2匹配时,没有break,控制权将转移到下一个case中的语句
case 值3:
语句块2; //该语句匹配2、3两个值
break;
……
case 值n:
语句块n;
break;
default: //都不匹配的时候执行的默认语句
语句块n+1;
}
2 循环结构
PHP中提供了while、do-while和for三种循环。
注意,循环体应包含趋于结束的语句(即循环变量值的改变),否则就可能成为死循环。所以使用循环时一定要有一个停止的条件。根据循环停止的条件不同,在PHP中提供了两种类型的循环语句。
- 一种是计数循环语句,通常使用for循环语句完成。
- 另一种是条件型循环语句,通常使用while或do-while循环语句完成。
2.1 while语句
while(表达式){ //表达式计算结果是一个布尔值,为TRUE时执行循环
循环体;
}
2.2 do…while循环
do{
循环体;
}while(表达式); //别忘记这里一定有个分号
while和do…while的区别在于,do……while的循环体至少会执行一次。
2.3 for语句
for循环适用于明确知道循环次数的情况。
for(初始化;条件表达式;增量){
循环体;
}
在for循环中,初始化总是一个赋值语句,用来控制循环变量初始值;条件表达式是一个关系表达式,它决定什么时候推出循环;增量表示每循环一次变量如何变化。循环体可以是单条语句和复合语句,如果是单条语句也可以不使用花括号。
<?php
for($i=1;$i<=10;$i++)
echo "for循环测试";
在for循环的三个表达式中,一个是多个表达式为空是允许的,通常被称为for循环的退化形式。可以将以上循环改写成下列几种格式:
<?php
//将for循环的第一部分初始条件提出来,放到for语句前面执行,但for语句中的分号要保留
$i=1;
for(;$i<=10;$i++){
echo "for循环测试";
}
//将第三部分提出来,放到for语句前面执行,但也要将分号保留
$i=1;
for(;$i<=10;){
echo "for循环测试";
$i++;
}
还可以每个表达式中编写多条语句:
<?php
for($i=1,$j=5,$k=10;$i<=10;$i++,$j+=5,$k+=10){
echo "\$i=$i,\$j=$j,\$k=$k<br>";
}
另外,增量不仅可以是增加的,也可以是递减的
3 特殊语句控制流程
这里介绍退出循环、跳过循环的语句。
3.1 break语句
break可以结束for、foreach、while、do……while或switch结构的执行。
执行break后,将退出for循环继续执行之后的语句。
3.2 contine语句
continue语句只能用在循环语句内部,功能是跳过该次循环,继续执行下一次循环结构。
在while和do……while语句中,continue是跳转到循环开始处继续执行。
对于for循环随后的工作是变量更新。
示例:求证书1~100的累加值,但要求跳过所有个数为3的数。
<?php
$sum=0;
for($i=1;1<+100;$i++){
if($i%10==3)
continue;
$sum+=$i;
}
continue语句的功能如下:
- 跳过本次循环,也可以接受一个可选的数字参数来决定跳出多重语句;
- 在循环中遇到contine就,就不会执行continue之后的语句;
- contine用于结束本次循环,继续下一次循环。
3.3 exit语句
在当前脚本中只要执行到exit语句,不管在任何结构中,都会直接退出当前脚本。
exit()是一个函数,die()是exit()函数的别名。它带有一个参数可以输出一条消息。
下面是一个数据库连接失败的话利用exit()输出错误并退出的例子:
<?php
//如果连接失败则输出错误信息并退出脚本
$conn=mysql_connect("localhost","root","123456")or exit("连接数据库失败!");
//如果连接后选择数据库失败则输出错误信息并退出脚本
mysql_select_db("db")or die("连接数据库失败!");
$result=mysql_query(select * from table);
if(!result){
echo "SQL语句执行失败";
//直接退出当前脚本
exit;
}
顺序结构、分支结构、循环结构并不是彼此孤立的,可以彼此多层嵌套。
4 PHP新特性——goto语句
goto于具有用于跳转到程序的指定位置。
goto目标后带上目标位置的标志,且在目标位置用目标名加冒号标记。
goto可以用来实现循环:
<?php
//使用goto语句,循环10次
$=1;
st:
echo"第{$i}次循环<br>";
if($i++==10)
goto end;
goto st;
end:
echo "语句结束。";
非goto的循环如果有多层,需要从多层循环中跳出,goto语句也是最好的选择:
<?php
for($i=0,$j=50;$<100;$i++){
while($j--){
if($j==17){
goto end;
}else{
echo "变量i={$i},变量j={$j}<br>";
}
}
}
echo "i=$i";
end:
除了编写循环之外,goto比较常用于实现程序跳转:
<?php
$var=2;
switch($var){
case 1:
goto one;
echo"one";
case 2:
goto two;
echo"two";
case 3:
goto three;
echo"three";
}
one:
echo "执行1";
exit;
two:
echo "执行2";
exit;
three:
echo "执行3";
exit;
另外,PHP中的goto使用也顶一定的限制,只能在同一个文件和作用域中跳转,也就是说无法跳出一个函数或类方法,也无法跳入另外一个函数,更无法跳入任何循环和switch结构。
goto语句的常见用法是跳出循环或switch语句,可以替代多层break。