simker

Life is too short, just make it.


  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

  • 音乐

  • 搜索

PHP流程控制小梳理

发表于 2021-02-08 更新于 2021-02-09 分类于 PHP 阅读次数: Disqus:
本文字数: 3.6k 阅读时长 ≈ 3 分钟

梳理, 温习关于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
/* 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 仅能够应用于数组和对象

语法:

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 中最简单的循环类型。
语法:

1
2
while (expr)
statement

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; // 跳出第二层循环 - do-while
} else {
break; // 跳出本层循环 - foreach
}
}
$created = rand(0, 1) ? true: false;
if ($created) break; // 跳出本层循环 - do-while
} 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
// start mysql transaction
try {
$first = rand(0, 1);
$second = rand(0, 1);
if ($first > $second) {
throw new Exception('Throw an exception here');
}
if ($first === $second) {
// commit mysql transaction
echo "It's normal!" . PHP_EOL;
}
if ($first < $second) {
throw new Error('Throw an error here');
}
} catch (\Error $error) {
// rollback mysql transaction
throw $error;
} catch (\Exception $exception) {
// rollback mysql transaction
throw $exception;
} finally {
echo 'finally!' . PHP_EOL;
}
// or you can use 'catch(\Throwable $previous)' to catch Error and Exception in PHP 7
?>

enjoy and happy coding!

Cai xian 微信支付

微信支付

Cai xian 支付宝

支付宝

# notes
PHP梳理之string
PHP梳理之array
  • 文章目录
  • 站点概览
Cai xian

Cai xian

A super nice guy!
24 日志
12 分类
15 标签
  1. 1. 判断
    1. 1.1. if
    2. 1.2. switch
  2. 2. 循环
    1. 2.1. for
    2. 2.2. foreach
    3. 2.3. while
    4. 2.4. do-while
  3. 3. 跳出循环
    1. 3.1. break
    2. 3.2. continue
  4. 4. try-catch
© 2019 – 2021 Cai xian | 70k | 1:04
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Pisces v7.3.0
|