流程控制简介
任何 PHP 脚本都是由一系列语句构成的。一条语句可以是一个赋值语句,一个函数调用,一个循环,一个条件语句或者甚至是一个什么也不做的语句(空语句)。语句通常以分号结束。此外,还可以用花括号将一组语句封装成一个语句组。语句组本身可以当作是一行语句。本章介绍了各种语句类型。
一、if
if 结构是很多语言包括 PHP 在内最重要的特性之一,它允许按照条件执行代码片段。PHP 的 if 结构和 C 语言相似:
- <?php
- $a=120;
- $b=110;
- if ( $a > $b )
- echo '$a > $b' ;//$a>$b
二、else
经常需要在满足某个条件时执行一条语句,而在不满足该条件时执行其它语句,这正是 else 的功能。else 延伸了 if 语句,可以在 if语句中的表达式的值为 FALSE 时执行语句。
- <?php
- $a=100;
- $b=110;
- if ( $a > $b ){
- echo '$a > $b' ;
- }else{
- echo '$a<$b';//$a<$b
- }
三、elseif/else if
elseif,和此名称暗示的一样,是 if 和 else 的组合。和 else 一样,它延伸了 if语句,可以在原来的 if 表达式值为 FALSE 时执行不同语句。但是和 else 不一样的是,它仅在 elseif 的条件表达式值为 TRUE 时执行语句。
- <?php
- $a=100;
- $b=110;
- if ( $a > $b ){
- echo '$a > $b' ;
- }elseif($a<$b){
- echo '$a<$b';//$a<$b
- }else{
- echo '$a既不大于$b,也不小于$b;';
- }
四、while
while 循环是 PHP 中最简单的循环类型。它和 C 语言中的 while 表现地一样。
while 语句的含意很简单,它告诉 PHP 只要 while 表达式的值为 TRUE 就重复执行嵌套中的循环语句。表达式的值在每次开始循环时检查,所以即使这个值在循环语句中改变了,语句也不会停止执行,直到本次循环结束。有时候如果 while 表达式的值一开始就是 FALSE ,则循环语句一次都不会执行。
- <?php
- $i = 1 ;
- while ( $i < 10 ) {
- echo $i ++; //123456789
- }
五、do-while
do-while 循环和 while循环非常相似,区别在于表达式的值是在每次循环结束时检查而不是开始时。和一般的 while 循环主要的区别是 do-while的循环语句保证会执行一次(表达式的真值在每次循环结束后检查),然而在一般的 while 循环中就不一定了(表达式真值在循环开始时检查,如果一开始就为 FALSE 则整个循环立即终止)。
do-while 循环只有一种语法:
- <?php
- $i = 1 ;
- do {
- echo $i ;// 1
- $i++;
- } while ( $i < 1 );
六、for
for 循环是 PHP 中最复杂的循环结构。它的行为和 C 语言的相似。 for 循环的语法是:
for (expr1; expr2; expr3)
statement
第一个表达式( expr1 )在循环开始前无条件求值(并执行)一次。
expr2 在每次循环开始前求值。如果值为 TRUE ,则继续循环,执行嵌套的循环语句。如果值为 FALSE ,则终止循环。
expr3 在每次循环之后被求值(并执行)。
- <?php
- for ( $i = 1 ; $i < 10 ; $i ++) {
- echo $i ;//123456789
- }
七、foreach
foreach 语法结构提供了遍历数组的简单方式。foreach仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。
- <?php
- $arr = array( 1 , 2 , 3 , 4 ,5);
- foreach ( $arr as $k=>$v ) {
- echo "$k=>$v;";//0=>1;1=>2;2=>3;3=>4;4=>5;
- }
- foreach ( $arr as $v ) {
- echo $v;//12345
- }
八、switch
switch 语句类似于具有同一个表达式的一系列 if语句。很多场合下需要把同一个变量(或表达式)与很多不同的值比较,并根据它等于哪个值来执行不同的代码。这正是 switch 语句的用途。
- <?php
- switch ( $i=2 ) {
- case 0 :
- echo '$i 等于 0' ;
- break;
- case 1 :
- echo '$i 等于 1' ;
- break;
- case 2 :
- echo '$i 等于 2' ;//$i 等于 2
- break;
- }
九、break
break 结束当前 for,foreach,while,do-while或者 switch 结构的执行。
break 可以接受一个可选的数字参数来决定跳出几重循环。
- <?php
- $i = 0 ;
- while (++ $i ) {
- switch ( $i ) {
- case 5 :
- echo "At 5<br />\n" ;
- break 1 ; /* 只退出 switch. */
- case 10 :
- echo "At 10; quitting<br />\n" ;
- break 2 ; /* 退出 switch 和 while 循环 */
- default:
- break;
- }
- }
十、continue
continue在循环结构用用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次循环。
continue 接受一个可选的数字参数来决定跳过几重循环到循环结尾。默认值是 1,即跳到当前循环末尾。
- <?php
- for ( $i = 0 ; $i < 5 ; ++ $i ) {
- if ( $i == 2 ){
- continue; //跳出
- }
- echo $i ;//0134
- }
十一、return
如果在一个函数中调用 return 语句,将立即结束此函数的执行并将它的参数作为函数的值返回。
- <?php
- function a($a=2,$b=3){
- return $a+$b;
- }
- if('www.fujieace.com'){
- echo a();//5
- }
流程控制的替代语法
PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach和 switch。
替代语法的基本形式是把左花括号({)换成冒号(:),
把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach;以及 endswitch;。
- <?php
- $a=12;
- if ( $a == 5 ):
- echo "a equals 5" ;
- echo "..." ;
- elseif ( $a == 6 ):
- echo "a equals 6" ;
- echo "!!!" ;
- else:
- echo "a is neither 5 nor 6" ;//a is neither 5 nor 6
- endif;
declare
declare 结构用来设定一段代码的执行指令。declare的语法和其它流程控制结构相似:
declare (directive)
statement
- <?php
- // these are the same:
- // you can use this:
- declare( ticks = 1 ) {
- // entire script here
- }
- // or you can use this:
- declare( ticks = 1 );
- // entire script here
goto
goto操作符可以用来跳转到程序中的另一位置。该目标位置可以用目标名称加上冒号来标记,而跳转指令是 goto 之后接上目标位置的标记。PHP 中的 goto有一定限制,目标位置只能位于同一个文件和作用域,也就是说无法跳出一个函数或类方法,也无法跳入到另一个函数。也无法跳入到任何循环或者 switch 结构中。可以跳出循环或者 switch,通常的用法是用 goto代替多层的 break。
- <?php
- goto a ;
- echo 'Foo' ;
- a :
- echo 'Bar' ; //Bar