梳理, 温习关于PHP流程控制的一些小知识
判断
if
这个比较好理解,示例:
1 2 3 4 5 6 7 8 9
| <?php 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"; } ?>
|
switch
类似于具有同一个表达式的一系列 if 语句。示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <?php if ($i == 0) { echo "i equals 0"; } elseif ($i == 1) { echo "i equals 1"; } elseif ($i == 2) { echo "i equals 2"; }
switch ($i) { case 0: echo "i equals 0"; break; case 1: echo "i equals 1"; break; case 2: echo "i equals 2"; break; } ?>
|
switch-case 规范请参考 PSR switch-case
循环
for
PHP 中最复杂的循环结构。
语法:
1 2
| for (expr1; expr2; expr3) statement
|
描述:
expr1 会在循环前无条件执行一次,你可以视为执行循环初始化的表达式。
expr2 会在每次循环前执行,如果返回true,则执行statement,否则跳出循环。
expr3 会在执行statement之后执行一次。
statement 循环体
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| <?php for ($i = 1; $i <= 10; $i++) { echo $i; }
for ($i = 1; ; $i++) { if ($i > 10) { break; } echo $i; }
$i = 1; for (;;) { if ($i > 10) { break; } echo $i; $i++; }
for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++); ?>
|
foreach
遍历数组的简单方式。
foreach 仅能够应用于数组和对象
语法:
1 2 3 4
| foreach (array_expression as $value) statement foreach (array_expression as $key => $value) statement
|
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <?php class Counter { public $counter = 0; protected $counte2r = 1; private $counte22r = 2;
public function increase() { $this->counter++; }
public function print() { return $this->counter; } }
$obj = new Counter; foreach($obj as $k => $a) { var_dump($k, $a); } $array = [ [1, 2], [3, 4], ];
foreach ($array as $k => list($a)) { echo "$k" . PHP_EOL; echo "$a" . PHP_EOL; } ?>
|
while
while 循环是 PHP 中最简单的循环类型。
语法:
while 语句的含意很简单,它告诉 PHP 只要 while 表达式(即expr)的值为 true 就重复执行嵌套中的循环语句。
示例:
1 2 3 4 5 6 7 8 9
| <?php $created = false; echo 'start' . PHP_EOL; while (empty($created)) { echo 'execute' . PHP_EOL; $created = rand(0, 1) ? true: false; } echo 'end' . PHP_EOL; ?>
|
do-while
个人认为:do-while 循环是 PHP 中第二简单的循环类型。
语法:
1 2
| do statement while(expr)
|
不同于 while 的是,他的循环体在执行判断表达式 expr (返回 false 跳出循环,返回 true 则继续执行循环体)之前。
示例:
1 2 3 4 5 6 7 8 9
| <?php $created = false; echo 'start' . PHP_EOL; do { echo 'execute' . PHP_EOL; $created = rand(0, 1) ? true: false; } while (empty($created)); echo 'end' . PHP_EOL; ?>
|
跳出循环
break
break 结束当前 for,foreach,while,do-while 或者 switch 结构的执行。
break 可以接受一个可选的数字参数来决定 跳出 几重循环。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <?php $created = false; $a = [2, 3]; echo 'start' . PHP_EOL; do { echo 'execute' . PHP_EOL; foreach($a as $k => $v) { $number = rand(0, 1); if ($number) { break 2; } else { break; } } $created = rand(0, 1) ? true: false; if ($created) break; } while (empty($created)); echo 'end' . PHP_EOL; ?>
|
continue
continue 跳过本次循环的执行。
continue 可以接受一个可选的数字参数来决定 跳过 几重循环。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?php $a = [2, 3, 5, 6]; echo 'start' . PHP_EOL; $index = 0; $length = count($a); while ($index < $length) { echo "execute ${a[$index]}" . PHP_EOL; $number = rand(0, 1); if ($number) { continue 2; } else { continue; } $index ++; } echo 'end' . PHP_EOL; ?>
|
try-catch
这个配合MySQL的事务处理一级棒!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| <?php try { $first = rand(0, 1); $second = rand(0, 1); if ($first > $second) { throw new Exception('Throw an exception here'); } if ($first === $second) { echo "It's normal!" . PHP_EOL; } if ($first < $second) { throw new Error('Throw an error here'); } } catch (\Error $error) { throw $error; } catch (\Exception $exception) { throw $exception; } finally { echo 'finally!' . PHP_EOL; } ?>
|
enjoy and happy coding!