PHP实践之路(六)控制结构

来源:互联网 发布:方舟子反对中医 知乎 编辑:程序博客网 时间:2024/06/06 07:27

PHP实践之路(目录索引)

PHP中控制结构

首先要说明的一点是:在php中和其他高级语言类似,在一对大括号{}中间的语句称为一个语句组。每条语句都是以分号作为结尾

1、if/else控制结构

a、结构模式一
if(expr){statement 1}else if(expr){statement 2}else if(expr){statement 3}……else{statement n}
b、结构模式二
if(expr):statement 1elseif(expr):statement 2elseif(expr):。statement 3……elsestatement nend if;

c、需要指出的是,(ˇˍˇ) java、c等语言一般都采用结构一。php中两种模式都可以采用。注意其中else if和elseif的区别
d、结构模式二作为php中一种控制结构的替代语法,详情见其他部分。在替代语法中不允许将elseif分开,否则编译将出错

实验时间
<?php$a=1;$b=2;if($a==$b):echo '$a = $b';echo ' see1?';elseif($a>$b):echo '$a > $b';echo ' see2?';else://这里执行else 将输出 $a < $b see3?echo '$a < $b';echo ' see3?';endif;echo '<br />';//换行$a=3;if($a==$b){echo '$a = $b';echo ' see4?';}else if($a > $b){//这里将执行,将输出 $a > $b see5?echo '$a > $b';echo ' see5?';}else{echo '$a < $b';echo ' see6?';}?>

2、while控制结构

a、结构模式一:当expr为true时执行
while(expr){statement}
b、结构模式二:当expr为true时执行,这是一种php中的替代语法
while(expr):statementendwhile;

c、结构模式三,do/while循环,先执行语句后检查条件
do{statement}while(expr);
实验时间
<?php$count = 0;while($count<=10){echo $count;echo " ";//输出一个空格$count++;}//以上将输出 0 1 2 3 4 5 6 7 8 9 10 //接下来测试替代语法$count = 0;//重置0echo "<br />";//换行while($count<=5):echo $count;echo " ";//输出一个空格$count++;endwhile;//以上将输出 0 1 2 3 4 5$count = 0;//重置0echo "<br />";//换行do{echo $count;echo " ";//输出一个空格$count++;}while($count<=5);//以上将输出 0 1 2 3 4 5/********看看一下while和do/while两种循环的区别**********/echo "<br />";//换行$count=0;while($count>0){echo "see1?";//不执行}$count=0;do{echo "see2?";//执行了一次,do/while循环最少执行一次循环内部的语句}while($count>0);?>

3、for控制结构

a、结构模式一
for(expr1;expr2;expr3){statement}
b、结构模式二
for(expr1;expr2;expr3):statementendfor;
c、
expr1在循环开始前无条件求值一次;
expr2 在每次循环开始前求值。如果值为TRUE,则继续循环,执行嵌套的循环语句。如果值为FALSE,则终止循环;
expr3 在每次循环之后被求值
d、foreach,它只适用于数组(自PHP5开始,foreach也可以遍历对象),结构模式如以下两种
foreach (array_expression as $value){statement}foreach (array_expression as $key => $value){statement}
每次执行forech时,数组内部的指针都会重新指向第一个单元,所以没必要担心执行一次后指针索引到哪了

实验时间
<?phpfor($count=0;$count<10;$count++){echo $count;echo " ";//空格}//以上输出 0 1 2 3 4 5 6 7 8 9 echo "<br />";//换行for($count=0;$count<5;$count++):echo $count;echo " ";//空格endfor;//以上输出 0 1 2 3 4echo "<br />";//换行$arr=array(1,2,3,4);foreach ($arr as $value){echo $value;echo " ";//空格}//以上输出 1 2 3 4echo "<br />";//换行foreach ($arr as $key => $value){echo $key."->".$value;echo " ";//空格}//以上输出 0->1 1->2 2->3 3->4   /*************以下测试foreach遍历对象**************/echo "<br />";//换行class Person{public $name="cyxl";private $age=26;public function loop(){foreach($this as $key => $val){echo $key."->".$val;echo " ";//空格}}}$p=new Person;foreach($p as $key => $val){echo $key."->".$val;echo " ";//空格}//以上输出 name->cyxlecho "<br />";//换行$p->loop();//输出 name->cyxl age->26//想想两次遍历对象$p为什么结果不一样,如果有面向对象知识基础的,//可以看看$name和$age前面的两个修饰符public和private的区别.没有//也没关系,后面我们将对象时会详细讲到的?>

4、swith控制结构

a、结果模式一
switch(expr){case val1:statementbreak;case val2:statementbreak;……default:statement}

b、结构模式二,替代语法
switch(expr):case val1:statementbreak;case val2:statementbreak;……default:statementendswitch;

c、以上模式为一般模式,其中statement、break;、default等是可选的
d、case后面的冒号“:”可以用分号“;”代替
e、switch中的表达式expr可以任意简单类型,如整数,浮点数和字符串。它只会被求值一次(if/else结构中每次都会重新求值,考虑到相率
方面可以考虑采用switch结构),然后从上往下依次和case中的值进行比较。当执行一个case中的语句末尾没有break语句的话,它还会执行
下一个case语句。所以为了让结构清晰,执行结果等原因最好是在每条case语句末尾都加上break
d、default作为一个默认的执行分支,当依次和case中的值比较发现没有相等的值时执行default中的语句,相当于if/else结构中的else分支
好,又到了实验时间了,一起动动手吧
<?php$i=0;switch ($i) {    case 0:        echo "i equals 0<br />";    case 1:        echo "i equals 1<br />";    case 2:        echo "i equals 2<br />";}//以上将输出/*i equals 0i equals 1i equals 2*/switch ($i) {    case 0:        echo "i equals 0<br />";break;//我们加上break比较一下输出结果    case 1:        echo "i equals 1<br />";break;    case 2:        echo "i equals 2<br />";break;}//以上将输出 i equals 0$name="jack";switch($name):case "lily";     //用分号代替冒号echo "name is lily<br />";break;case "jack";echo "name is jack<br />";break;default;echo "defautl name<br />";break;endswitch;//以上输出 name is jack$name="";switch($name):case "lily";echo "name is lily<br />";break;case "jack";echo "name is jack<br />";break;default;echo "defautl name<br />";break;endswitch;//以上输出 defautl name?>

5、goto控制结构

a、goto操作符可以用来跳转到程序中的某一指定位置。该目标位置可以用目标名称加上冒号来标记
b、PHP中只能在同一个文件和作用域中跳转,也就是说你无法跳出一个函数或类方法,也无法跳入到另一个函数。你也无法跳入到任何循环或者switch 结构中
c、常见的用法是用来跳出循环或者switch,可以代替多层的break
d、由于goto结构很容易就破坏了程序的执行流程,使用时应当谨慎
好了,我们来实验一下吧
<?php$count=10;while($count>0){$count--;if($count==5){goto end;}echo "count to ".$count;echo "<br />";}//以上将输出/*count to 9count to 8count to 7count to 6game over..*/end:echo "game over...";?>

6、其他

a、php中的替代语法:包括 if,while,for,foreach 和 switch。替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;结合以上的例子,我们已经在例子中使用了一些替代语法
b、break:结束当前forforeachwhiledo-while 或者 switch 结构的执行。可以接受一个可选的数字参数来决定跳出几重循环
c、continue:在循环结构用用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次循环;它可以接受一个可选的数字参数来决定跳过几重循环到循环结尾
d、return:结束当前函数或者脚本的执行,具体看return使用的具体位置
接下来我们做几个实验
<?php$count=10;while($count>0){$count--;if($count==8){continue;//执行下一次循环}if($count==5){break;//直接跳出循环}echo "count to ".$count;echo "<br />";}//以上输出结果如下/*count to 9count to 7count to 6*/function calc($a,$b){return $a + $b;//返回相加的结果,结束当前函数}echo(calc(1,2));//输出结果3return;//结束主脚本的运行echo "see?";//不再执行输出?>


原创粉丝点击