PHP控制结构仅三类:顺序(默认逐行执行)、分支(if和switch两种可靠写法)、循环(while、do-while、for、foreach四种)。无第四种,无需记虚名。

PHP 控制结构就三类:顺序、分支、循环。没有第四种,也不需要记“高级控制结构”这种虚名。
顺序结构不是“结构”,是默认行为
不写任何 if、for、switch,代码从上到下一行行执行,就是顺序结构。它不靠关键字实现,是 PHP 解析器的自然行为。
- 变量赋值后立刻可用,不需要“声明前置”
-
echo、require、函数调用都按书写顺序触发 - 唯一要注意的是:如果某行抛出致命错误(如
Fatal error: Call to undefined function),后续代码直接中断 —— 这不是顺序结构失效,而是进程已退出
分支结构只有两种可靠写法:if 和 switch
if 和 switch
if 用于任意布尔判断;switch 仅适合等值匹配固定类型(int、string、null),且 PHP 8+ 开始支持表达式和箭头语法,但老项目仍常见传统写法。
-
if支持嵌套,但超过三层建议拆成函数,否则逻辑难维护 -
elseif和else if功能完全一样,但前者是单个关键字,后者是两个词 —— 混用会导致 IDE 高亮异常或 PSR-12 格式报错 -
switch忘写break会穿透(fall-through),这是最常被忽略的坑;PHP 8.0+ 的match表达式默认不穿透,但它是表达式,不能替代switch做复杂语句块 - 不要用
switch判断浮点数或数组 ——===严格比较下永远不匹配
循环结构实际就四个:while、do-while、for、foreach
while、do-while、for、foreach
其他像 goto 或递归不算“循环结构”,只是跳转或调用方式;foreach 是唯一专为遍历设计的,性能和可读性都优于 for 配合 count()。
立即学习“PHP免费学习笔记(深入)”;
-
foreach($arr as $k => $v)中,$k和$v是副本,修改它们不影响原数组;要改原值得用&$v -
for循环里别在条件部分调用函数(如for($i=0; $i ),每次迭代都重新计算 <code>count(),大数组下明显拖慢 -
do-while至少执行一次,适合需要“先干活再检查”的场景,比如读取文件块、重试逻辑 - 所有循环里慎用
continue 2或break 2—— 它们能跳出多层,但会让控制流难以追踪,多数情况应重构为函数返回
真正容易被忽略的,是 控制结构嵌套时的作用域透明性:PHP 没有块级作用域,if 或 for 内声明的变量,在外部依然可见。这不是 bug,是语言设计事实 —— 别指望靠缩进隐藏变量。



















