PHP 零基础教程

PHP do-while 循环

do-while 循环会在检查条件之前先执行一次代码块,然后只要指定的条件保持为 true(真),它就会继续重复执行该代码块。与 while 循环(在第一次迭代之前评估条件)不同,do-while 循环保证了花括号内的代码至少会运行一次,无论初始条件是否满足。

1. 确保至少执行一次的语法结构

它的语法遵循一个特定的模式:do 代码块包含要执行的逻辑,而 while 条件则在代码块完成执行后才进行评估。

<?php
$attempts = 0;

do {
    // 这里的代码至少会运行一次
    echo "尝试次数:" . ($attempts + 1) . "<br>";
    $attempts++;
} while ($attempts < 3);
?>

在上面的代码片段中,do 块内部的代码会被先处理,变量 $attempts 被递增,然后才评估 while 里的条件。因为评估发生在最后,所以程序只有在 $attempts 达到 3 时才会退出循环。

2. 何时使用 do-while 循环

当你的业务逻辑要求必须先发生某个动作,然后才能进行验证检查时,请使用 do-while 循环。一个常见的场景是提示用户输入,或者连接到外部服务:你必须先尝试执行该操作,才能查看状态是否符合你的要求。

假设我们设计了一个系统,需要生成一个随机的唯一 ID,直到它找到一个在数据库中不存在的 ID 为止:

<?php
// 我们必须先生成一个 ID,然后才能去检查它是否已经被占用。
do {
    $generatedId = rand(1000, 9999);
    $isTaken = checkDatabaseForId($generatedId); // 假设这个检查数据库的函数已经存在
} while ($isTaken === true);

echo "分配的 ID 是:" . $generatedId;
?>

如果你在这里使用标准的 while 循环,你将不得不先定义 $isTaken 并给它一个虚拟值(比如 true),仅仅是为了“骗”过循环让它启动,这就引入了不必要的复杂性。而 do-while 循环完美消除了这种多余的初始化操作。

3. 执行流程对比:while 与 do-while

while 循环和 do-while 循环之间最根本的区别在于评估条件的切入点

  • 上方逻辑: 标准的 while 循环在执行代码之前检查条件。(先问票,再进门)
  • 上方逻辑: do-while 循环确保逻辑代码块在第一次条件检查之前执行。(先进门,再查票)

4. 潜在陷阱:无限循环

因为 do-while 循环总是至少执行一次它的主体,如果条件永远无法达成,并且状态也没有被修改以打破该条件,它就极易陷入无限循环(Infinite Loops)。务必确保在 while 条件中使用的变量,在循环的执行过程中正在被更新。

<?php
$i = 0;

// 危险操作:这将永远运行下去,因为 $i 的值从未被更新
do {
    echo $i;
} while ($i < 5); 
?>

始终要验证你的循环是否有一个清晰、可达的退出路径(例如在上面的 do 块中加上 $i++;),以防止脚本无休止地消耗服务器的内存和 CPU 资源。