php基础-流程控制(第12天)
流程控制
一.流程控制做什么用的?
流程控制,代表执行的方向
在 PHP 里,流程控制就是决定代码执行顺序和方向的“交通灯”,没有它,程序只能从上往下死板执行
-
控制代码的执行方向
-
根据条件选择不同的分支
-
根据循环结构重复执行某些代码
-
在需要的时候跳出、终止或跳转执行
二.有哪几种如何分类?
2.1 按程序逻辑角度(宏观分类)
这是“程序设计最基本的控制结构”的分类方法,也是理论上最核心的三种模式:
2.1.1顺序结构
- 默认从上到下执行代码。
- 代码从上往下,顺序执行(代码执行的最基本结构)
- 示例:
echo "开始\n";
echo "处理中\n";
echo "结束\n";
2.1.2分支结构(选择结构)
- 根据条件判断执行不同的分支。
- 给定一个条件,同事有多重可执行代码块,然后根据条件执行某一段代码
- 示例:
$score = 80;
if ($score >= 60) {echo "及格";
} else {echo "不及格";
}
2.1.3循环结构
- 重复执行某段代码,直到条件不满足。
- 在某个条件控制范围内,指定的代码(块)可以重复执行
- 示例:
for ($i=1; $i<=3; $i++) {echo "第 $i 次循环\n";
}
这一分类强调逻辑流程:程序走直线、岔路口,或者在原地绕圈。
2.2 按语法形式(具体实现)
这是实际编程中用到的具体语句分类:
2.2.1 条件分支语句
if / else
if / elseif / else
switch
2.2.2 循环语句
while
do...while
for
foreach
2.2.3 跳转控制语句
break
→ 跳出循环或switch
continue
→ 跳过本次循环,进入下一次exit
/die
→ 终止脚本执行goto
→ 直接跳转到指定标签(少用)
这一分类强调实际语法层面,程序员写代码时直接用到。
2.2.4
2.3 结合角度理解
- 顺序结构 = 默认路线,代码一行行走下去
- 分支结构 = “岔路口”,根据条件走不同分支
- 循环结构 = “旋转木马”,原地重复执行
- 跳转控制 = “刹车/换轨道”,调整执行流
三.流程控制的代替语法
HTML 中可以直接用 <?php ... ?>
包裹 PHP 代码,然后根据条件或循环输出不同内容。
1. 顺序结构(默认执行)
<!DOCTYPE html>
<html>
<body>
<h1>欢迎</h1>
<p><?php echo "今天是 " . date("Y-m-d"); ?></p>
</body>
</html>
- 这里的 PHP 是顺序执行的,先输出日期,再显示 HTML 结构。
2. 条件分支(显示不同内容)
<?php $age = 20; ?>
<p><?php if ($age >= 18): ?>成年人<?php else: ?>未成年人<?php endif; ?>
</p>
if: ... endif;
是 PHP 提供的在 HTML 中书写条件分支的语法糖,更适合模板嵌入。- 也可以用三元运算符:
<p><?= $age >= 18 ? "成年人" : "未成年人" ?></p>
3. 循环(动态生成列表或表格)
<ul>
<?php
$fruits = ["苹果", "香蕉", "橘子"];
foreach ($fruits as $fruit):
?><li><?= $fruit ?></li>
<?php endforeach; ?>
</ul>
- 输出
<ul>
列表,每个<li>
由 PHP 循环生成。
4. 跳转控制(中断或跳过)
<?php
$show = false;
if (!$show) {return; // 停止当前模板的执行
}
?>
<p>这里显示的内容只有 $show 为 true 才能看到</p>
- 在模板中,也可以用
break
/continue
控制循环输出。
三.表达式
参考
https://www.php.net/manual/zh/language.expressions.php
3.1. 什么叫“表达式”
- 表达式就是有值的语句,可以参与计算或赋值。
- 例如
$a + 5
是表达式,它的值是$a
+ 5。 - 在很多语言里,赋值不一定是表达式,有些语言(早期的 Pascal、VB)赋值只是语句,没有值。
3.2. PHP 的“推进更深远”指什么
PHP 的特点是:几乎所有东西都是表达式,不仅仅是运算或赋值,很多操作都可以作为值参与其他表达式。
-
赋值本身是表达式
$b = $a = 5; // $a = 5 的表达式值就是 5
你可以把它直接嵌套使用,这在一些语言里做不到。
-
函数调用、运算符、甚至 echo(在某些上下文里)都可以作为表达式的一部分使用。
$c = strlen("abc") + 5;
→strlen("abc")
是表达式,有值 3
-
三元运算符和逻辑运算的短路返回值
$result = $a && $b || $c;
- 逻辑运算返回的是布尔值,可以直接参与赋值或函数参数。
-
递归与链式赋值
$x = $y = $z = someFunction();
- 这在 PHP 里很自然,因为每一步赋值本身都是表达式,有值可以继续传递。
换句话说,PHP 把“表达式”当作 可随处使用的值 推得比很多语言更彻底,而不是只在运算或赋值时出现。
3.3. 相比 JS 的不同
- JS 也把赋值、函数调用当表达式,但 PHP 更强调 每个操作几乎都有值,比如你可以写链式赋值、嵌套赋值、嵌套函数赋值,而 PHP 习惯把赋值结果直接用作下一步表达式的值。
- 在 JS 中某些语句(例如
var x = ...;
)更偏向“语句”,不能直接像 PHP 那样嵌套使用(虽然现代 JS 也支持链式赋值)。
3.4总结一句话
“推进得更深远”意思是:PHP 将表达式的概念扩展到几乎所有操作,使赋值、函数调用、运算符、逻辑操作都可以当作值使用,这让程序可以更灵活地组合和嵌套表达式。