PHP 流程控制
流程控制就是控制程序运行顺序的指令,如条件、循环。
if
if 按照条件执行代码片段,语法:
<?php if (表达式) 语句
判断表达式的布尔值,其他类型的值将自动转换为布尔值,例子:
<?php $a = 2; $b = 1; if ($a > $b) echo "a 大于 b";
else
在不满足该条件时执行其它语句。
<?php if ($a > $b) { echo "a 大于 b"; } else { echo "a 不大于 b"; }
elseif/else if
elseif / else if 语句加强了 if 语句,可以在 if 表达式值为 false 时执行不同语句。
<?php if ($a > $b) { echo "a 大于 b"; } elseif ($a == $b) { echo "a 等于 b"; } else { echo "a 小于 b"; }
while
while循环是 PHP 中最简单的循环类型,语法:
while (表达式) 语句
只要 while 表达式的值为 true, 就重复执行嵌套中的循环语句。
<?php $i = 1; while ($i <= 10) { echo $i++; // 输出1-10 }
do-while
和 while 循环主要的区别是, do-while 的循环语句保证会执行一次(在每次循环结束后检查表达式的真值)。
<?php $i = 0; do { echo $i; // 输出0 } while ($i > 0);
for
for 循环是 PHP 中常用的循环结构,语法:
for (表达式1; 表达式2; 表达式3) 语句
表达式1 在循环开始前无条件执行一次。
表达式2 在每次循环开始前求值,当值为 false时终止循环。
表达式3 在每次循环之后被执行。
<?php for ($i = 1; $i <= 10; $i++) { echo $i; // 输出1-10 }
foreach
foreach 语法结构是遍历数组的简单方式,它有两种语法:
// 语法1 foreach (数组 as $value) 语句 // 语法2 foreach (数组 as $key => $value) 语句
第一种格式遍历给定的数组,每次循环中,当前元素的值被赋给变量 $value。
第二种格式做同样的事,并把当前单元的键也会赋给变量 $key。
<?php $arr = [1, 2, 3, 4]; $sum = 0; foreach ($arr as $value) { $sum = $sum + $value ; } echo $sum; // 数组求和,输出10
可以很容易地通过在 $value 之前加上 & 来修改数组的元素。
<?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; }
break
break 用于跳出循环,可以结束 for,foreach,while,do-while 或者 switch 结构的执行。
<?php $arr = ['one', 'two', 'three', 'four', 'stop', 'five']; foreach ($arr as $val) { if ($val == 'stop') { break; } echo "$val<br />\n"; }
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 在循环结构用用来跳过本次循环中剩余的代码,并在条件求值为真时开始执行下一次循环。
<?php for ($i = 0; $i < 5; ++$i) { if ($i == 2) continue; echo "$i "; // 0 1 3 4 }
switch
switch 语句类似于具有同一个表达式的一系列 if 语句。
注意:
1、switch/case 作的是松散比较;
2、如果不在 case 的语句段最后写上 break 的话,PHP 将继续执行下一个 case 中的语句段。
<?php $i = 1; switch ($i) { case 0: echo "i equals 0"; break; case 1: echo "i equals 1"; break; case 2: echo "i equals 2"; break; }
一个 case 的特例是 default,它匹配了任何和其它 case 都不匹配的情况。
<?php $i = 3; switch ($i) { case 0: echo "i equals 0"; break; case 1: echo "i equals 1"; break; case 2: echo "i equals 2"; break; default: echo "i is not equal to 0, 1 or 2"; }
match
match 从 PHP 8.0.0 开始可用。
match 和 switch 类似,但不同的是,match 作的是严格比较 (===),switch作的是松散比较 (==)。
<?php $condition = '1'; $expressionResult = match ($condition) { 1, 2 => foo(), 3, 4 => bar(), default => baz(), // 由于 match 作的是严格比较 (===),baz()将被执行,其结果作为 match 的返回值。 };
return
return 将程序控制返还给调用者。
<?php function plusOne($num) { return $num + 1; }
include
包含并运行指定文件,如果未找到文件则 include 会发出一条警告。
vars.php
<?php $color = 'green'; $fruit = 'apple';
test.php
<?php echo "A $color $fruit"; // 输出A include 'vars.php'; echo "A $color $fruit"; // 输出A green apple
require
require 和 include 几乎完全一样,但是 require 在出错时产生 E_COMPILE_ERROR 级别的错误,将导致脚本中止; include 只产生警告(E_WARNING),脚本会继续运行。
include_once
include_once 和 include 类似,区别是 include_once 会检查该文件是否已经被包含过,如果是则不会再次包含。
require_once
require_once 和 require 类似,区别是 require_once 会检查该文件是否已经被包含过,如果是则不会再次包含。
goto(不建议使用,会令程序可读性变差)
goto 可以用来跳转到程序中的另一位置。目标位置可以用目标名称加上冒号来标记,而跳转指令是 goto 之后接上目标位置的标记。
<?php goto a; echo 'Foo'; a: echo 'Bar';
以上例程会输出:
Bar