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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容

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