do while循环先执行后判断,至少运行一次;while先判断后执行,条件为假时不运行;常见错误包括漏分号、变量未更新、浮点数精度误判及条件写反。

do while 循环的基本写法
PHP 的 do while 是「先执行、后判断」的循环,至少运行一次,适合需要确保主体逻辑至少触发一回的场景(比如用户输入校验、文件读取尝试)。
语法结构固定,注意分号不能漏:
do {
// 循环体(至少执行一次)
} while (条件表达式);
常见错误是把 while 后面的分号写成逗号或丢掉,会导致 Parse error:Parse error: syntax error, unexpected ';' 或直接报错退出。
和 while 循环的关键区别在哪
核心就一条:while 是先判后跑,条件为 false 时一次都不进;do while 是先跑后判,哪怕条件一开始就是 false,循环体也执行一遍。
- 用
while ($i > 10) { echo $i; }→ 完全不输出 - 用
do { echo $i; } while ($i > 10);→ 输出一次$i值,再退出
这个差异在处理数据库查询结果、API 响应解析等「可能为空但需初始化动作」的场景里很关键。
实际中容易踩的坑
最常出问题的是循环变量没在循环体内更新,导致死循环。PHP 不会自动帮你改变量,全靠手写逻辑。
- 忘记在
do块内修改控制条件的变量(比如没写$i++) - 条件写反,例如本该用
$i 却写了 <code>$i >= 5,且初始值是 0 - 浮点数做条件判断,比如
do { ... } while ($x != 0.3);—— 因精度问题可能永远不等于,建议改用差值比较:abs($x - 0.3) > 0.0001
另外,break 和 continue 在 do while 中行为和其它循环一致,但 continue 会跳过本次剩余代码,直接跳到 while 条件判断——这点容易被忽略。
什么时候该选 do while 而不是 for 或 while
典型信号是:你明确需要「至少执行一次」,而且终止条件依赖循环体内部产生的状态。
- 读取文件行,直到遇到空行或 EOF:
do { $line = fgets($fp); } while ($line !== false && $line !== "\n"); - 生成随机唯一 ID,重试直到不冲突:
do { $id = bin2hex(random_bytes(4)); } while (record_exists($id)); - 交互式命令行工具中提示用户输入,不能为空:
do { $input = readline('Enter value: '); } while (trim($input) === '');
如果只是简单计数或遍历数组,优先用 for 或 foreach;只有当语义上强调「先干再说,再看还干不干」时,do while 才真正不可替代。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











