3.PHP的流程控制结构

在任何一门设计语言中,都需要支持满足程序结构化所需要的三种基本结构、顺序结构、分支结构(选择结构或条件结构)和循环结构。

最基本的是循序结构。顺序结构就是语句按出现的先后次序顺序执行。在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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 6/21 潘娟 北京【每日一结构】结构思考力21天思维改善训练营 G:【学习积累~房市信息】从国家统计局发布信息看...
    轻风吾爱阅读 1,274评论 0 0
  • 导入的权限:船舶端admin导入需要Excel2003模板 导入模板 第一行为船舶名称第二行为表头从第三行开始为数...
    cherry_liulei阅读 1,886评论 0 0
  • 欢迎使用编辑阅读器 我们理解你需要更便捷更高效的工作记录思想,整理笔记,知识,并将其中承载的价值传播给他人,Cmd...
    月张阅读 2,532评论 0 0
  • 天下风云出我辈,一入江湖岁月催。皇图霸业谈笑间,不胜人生一场醉。提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只...
    林子酱阅读 2,299评论 2 0

友情链接更多精彩内容