PHP流程控制

来源:互联网 发布:写代码的软件 编辑:程序博客网 时间:2024/05/29 08:03

if语句;
else语句;
if else 语句;

<?phpif (expr)  statement?>

实例代码:

<?phpif ($a > $b) {  echo "a is greater than b";} else {  echo "a is NOT greater than b";}?>

流程控制的替代语法
(PHP 4, PHP 5, PHP 7)

PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch。替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。

示例1:

<?php if ($a == 5): ?>A is equal to 5<?php endif; ?>

示例2:

<?phpif ($a == 5):    echo "a equals 5";    echo "...";elseif ($a == 6):    echo "a equals 6";    echo "!!!";else:    echo "a is neither 5 nor 6";endif;?>

Note:
不支持在同一个控制块内混合使用两种语法。

break and continue

break 结束当前 for,foreach,while,do-while 或者 switch 结构的执行。

continue 在循环结构用用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次循环。

while循环

<?php/* example 1 */$i = 1;while ($i <= 10) {    echo $i++;  /* the printed value would be                    $i before the increment                    (post-increment) */}/* example 2 */$i = 1;while ($i <= 10):    print $i;    $i++;endwhile;?>

do-while

<?php$i = 0;do {   echo $i;} while ($i > 0);?>

NOTE:也可通过break,跳出循环。

for 循环

<?php$people = Array(        Array('name' => 'Kalle', 'salt' => 856412),         Array('name' => 'Pierre', 'salt' => 215863)        );for($i = 0, $size = count($people); $i < $size; ++$i){    $people[$i]['salt'] = rand(000000, 999999);}?>

foreach循环
foreach 语法结构提供了遍历数组的简单方式

有两种语法:foreach (array_expression as $value)    statementforeach (array_expression as $key => $value)    statement

第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。

第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。

注意:
当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()。

可以很容易地通过在 $value 之前加上 & 来修改数组的元素。此方法将以引用赋值而不是拷贝一个值。

$value,把数组元素的每一个值循环赋值给 value。value改变原数组元素不会改变。

&$value,代表数组元素对应的内存地址值赋值给value。
value的值改变则对应内存地址里面的值也被改变。

<?php$arr = array(1, 2, 3, 4);foreach ($arr as &$value) {    $value = $value * 2;}// $arr is now array(2, 4, 6, 8)unset($value); // 最后取消掉引用?>

用 list() 给嵌套的数组解包,也就是二维数组

<?php$array = [    [1, 2],    [3, 4],];foreach ($array as list($a, $b)) {    // $a contains the first element of the nested array,    // and $b contains the second element.    echo "A: $a; B: $b\n";}?>

list() 中的单元可以少于嵌套数组的,此时多出来的数组单元将被忽略:

<?php$array = [    [1, 2],    [3, 4],];foreach ($array as list($a)) {    // Note that there is no $b here.    echo "$a\n";}?>

以上例程会输出:
1
3

continue

continue 在循环结构用用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次循环。

continue 接受一个可选的数字参数来决定跳过几重循环到循环结尾。默认值是 1,即跳到当前循环末尾。

continue 更新记录:
5.4.0 continue 0; 不再合法。这在之前的版本被解析为 continue 1;。
5.4.0 取消变量作为参数传递(例如 num=2;continuenum;)。

示例:

<?phpwhile (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 可以支持integer,也可以支持字符串

<?phpswitch ($i) {case "apple":    echo "i is apple";    break;case "bar":    echo "i is bar";    break;case "cake":    echo "i is cake";    break;}?>

declare 类似于定时器
declare 结构用来设定一段代码的执行指令

declare (directive)    statement

directive 部分允许设定 declare 代码段的行为。目前只认识两个指令:ticks以及 encoding指令。

1,declare 代码段中的 statement 部分将被执行——怎样执行以及执行中有什么副作用出现取决于 directive 中设定的指令

2,declare 结构也可用于全局范围,影响到其后的所有代码(但如果有 declare 结构的文件被其它文件包含,则对包含它的父文件不起作用)。

Ticks

Tick(时钟周期)是一个在 declare 代码段中解释器每执行 N 条可计时的低级语句就会发生的事件。N 的值是在 declare 中的 directive 部分用 ticks=N 来指定的。

不是所有语句都可计时。通常条件表达式和参数表达式都不可计时。

<?phpdeclare(ticks=1);// A function called on each tick eventfunction tick_handler(){    echo "tick_handler() called\n";}// 当执行这个方法以后就开始输出tick_handler() calledregister_tick_function('tick_handler'); // 这是第一次$a = 1;// 这是第二次if ($a > 0) { // 表达式不执行,但是如果是空语句也会执行的    $a += 2;// 这是第三次    print($a);// 这是第四次 但是是先输出a的值,然后再执行}// 这是第五次?>

结果:

/* * tick_handler() called  * tick_handler() called  * tick_handler() called  * 3 * tick_handler() called  * tick_handler() called  */

return

如果在一个函数中调用 return 语句,将立即结束此函数的执行并将它的参数作为函数的值返回。return 也会终止 eval() 语句或者脚本文件的执行。

require

require 和 include 几乎完全一样,除了处理失败的方式不同之外。require 在出错时产生 E_COMPILE_ERROR 级别的错误,换句话说将导致脚本中止,而 include 只产生警告(E_WARNING),脚本会继续运行。

require_once
require_once 语句和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。

include_once

include_once 语句在脚本执行期间包含并运行指定文件。此行为和 include 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次。

goto
goto 操作符可以用来跳转到程序中的另一位置。该目标位置可以用目标名称加上冒号来标记,而跳转指令是 goto 之后接上目标位置的标记。PHP 中的 goto 有一定限制,目标位置只能位于同一个文件和作用域,也就是说无法跳出一个函数或类方法,也无法跳入到另一个函数。也无法跳入到任何循环或者 switch 结构中。可以跳出循环或者 switch,通常的用法是用 goto 代替多层的 break。

<?phpgoto a;echo 'Foo';a:echo 'Bar';?>

以上例程会输出:
Bar

0 0