PHP 之流程控制
一、关键字
- if
if ( $a > $b ) { echo "a is bigger than b" ; $b = $a ; }
- else
if ( $a > $b ) { echo "a is greater than b" ; } else { echo "a is NOT greater than b" ; }
- elseif/else if
if ( $a > $b ) { echo "a is bigger than b" ; } elseif ( $a == $b ) { echo "a is equal to b" ; } else { echo "a is smaller than b" ; }
- 流程控制的替代语法
PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch。替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。
if ( $a == 5 ): echo "a equals 5" ; echo "..." ; elseif ( $a == 6 ): echo "a equals 6" ; echo "!!!" ; else: echo "a is neither 5 nor 6" ; endif;
- while
while 语句的含意很简单,它告诉 PHP 只要 while 表达式的值为 TRUE
就重复执行嵌套中的循环语句。表达式的值在每次开始循环时检查,所以即使这个值在循环语句中改变了,语句也不会停止执行,直到本次循环结束。有时候如果 while 表达式的值一开始就是 FALSE
,则循环语句一次都不会执行。
$i = 1 ; while ( $i <= 10 ): print $i ; $i ++; endwhile;
- do-while
do-while 循环和 while 循环非常相似,区别在于表达式的值是在每次循环结束时检查而不是开始时。和一般的 while 循环主要的区别是 do-while 的循环语句保证会执行一次(表达式的真值在每次循环结束后检查),然而在一般的 while 循环中就不一定了(表达式真值在循环开始时检查,如果一开始就为 FALSE
则整个循环立即终止)。
do { if ( $i < 5 ) { echo "i is not big enough" ; break; } $i *= $factor ; if ( $i < $minimum_limit ) { break; } echo "i is ok" ; /* process i */ } while( 0 );
- for
/* example 1 */ for ( $i = 1 ; $i <= 10 ; $i ++) { echo $i ; } /* example 2 */ for ( $i = 1 ; ; $i ++) { if ( $i > 10 ) { break; } echo $i ; } /* example 3 */ $i = 1 ; for (;;) { if ( $i > 10 ) { break; } echo $i ; $i ++; } /* example 4 */ for ( $i = 1 , $j = 0 ; $i <= 10 ; $j += $i , print $i , $i ++);
- foreach
foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。
foreach (array( 1 , 2 , 3 , 4 ) as & $value ) { $value = $value * 2 ; }
- break
break 结束当前 for,foreach,while,do-while 或者 switch 结构的执行。
break 可以接受一个可选的数字参数来决定跳出几重循环。
$arr = array( 'one' , 'two' , 'three' , 'four' , 'stop' , 'five' ); while (list (, $val ) = each ( $arr )) { if ( $val == 'stop' ) { break; /* You could also write 'break 1;' here. */ } echo " $val <br />\n" ; } /* 使用可选参数 */ $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 在循环结构用用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次循环。
while (list ( $key , $value ) = each ( $arr )) { if (!( $key % 2 )) { // skip odd members continue; } do_something_odd ( $value ); } $i = 0 ; while ( $i ++ < 5 ) { echo "Outer<br />\n" ; while ( 1 ) { echo "Middle<br />\n" ; while ( 1 ) { echo "Inner<br />\n" ; continue 3 ; } echo "This never gets output.<br />\n" ; } echo "Neither does this.<br />\n" ; }
- switch
switch 语句类似于具有同一个表达式的一系列 if 语句。很多场合下需要把同一个变量(或表达式)与很多不同的值比较,并根据它等于哪个值来执行不同的代码。这正是 switch 语句的用途。
switch ( $i ) { case "apple" : echo "i is apple" ; break; case "bar" : echo "i is bar" ; break; case "cake" : echo "i is cake" ; break; }
- declare
declare (directive)
statement
directive 部分允许设定 declare 代码段的行为。目前只认识两个指令:ticks以及encoding。
declare支持两种写法:
1. declare(ticks = 1); 整个脚本
2. declare(ticks = 1) { 内部的代码做记录
…
}
declare (ticks = 1); //这句这么写表示全局的脚本都做处理 function foo() { //注册的函数 static $no; $no++; echo $no."======"; echo microtime()."\n"; } register_tick_function("foo"); //注册函数,后面可以跟第2个参数,表示函数的参数 $a = 1; for($i=0;$i<5;$i++) { //这里的循环也是语句,会做一次判断$i<5的判断执行 $b = 1; }
上述代码除了 函数体内,外部都会被执行,运行可以看执行次数和时间. 他跟适合做测试代码段中每一步分的执行时间 和执行次数.
declare 必须是全局的,放在程序外部.
tick 代表一个事件,事件的定义是在register_tick_function;事件的执行频率是在(ticks=3)。
表示事件频率是执行3个才记录一次. microtime() 的打印时间.
- return
如果在一个函数中调用 return 语句,将立即结束此函数的执行并将它的参数作为函数的值返回。 return 也会终止 eval() 语句或者脚本文件的执行。
- require
require 和 include 几乎完全一样,除了处理失败的方式不同之外
- include
include 语句包含并运行指定文件。
function foo () { global $color ; include 'vars.php' ; echo "A $color $fruit " ; } /* vars.php is in the scope of foo() so * * $fruit is NOT available outside of this * * scope. $color is because we declared it * * as global. */ foo (); // A green apple echo "A $color $fruit " ; // A green
- require_once
require_once 语句和 require 语句完全相同
- include_once
include_once 语句在脚本执行期间包含并运行指定文件。此行为和 include 语句类似
include_once "a.php" ; // 这将包含 a.php include_once "A.php" ; // 这将再次包含 a.php!(仅 PHP 4)
- goto
goto 操作符可以用来跳转到程序中的另一位置。该目标位置可以用目标名称加上冒号来标记,而跳转指令是 goto 之后接上目标位置的标记。PHP 中的 goto 有一定限制,目标位置只能位于同一个文件和作用域,也就是说无法跳出一个函数或类方法,也无法跳入到另一个函数。也无法跳入到任何循环或者 switch 结构中。可以跳出循环或者 switch,通常的用法是用 goto 代替多层的 break。
for( $i = 0 , $j = 50 ; $i < 100 ; $i ++) { while( $j --) { if( $j == 17 ) goto end ; } } echo "i = $i " ; end : echo 'j hit 17' ;
二、include、include_once、require、require_once区别
1、require 在出错时产生 E_COMPILE_ERROR
级别的错误。换句话说将导致脚本中止而 include 只产生警告( E_WARNING
),脚本会继续运行。
2、require_once 语句和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。
3、include_once 语句在脚本执行期间包含并运行指定文件。此行为和 include 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次。