一段明明条件不满足却依然固执执行一次的代码,在程序员调试时突然跳出来,既让人恼火又恍然大悟。
01 基础语法,一个被忽略的分号
do...while循环的基本结构看起来简单明了。它由两部分组成:执行体(do后面的代码块)和条件判断(while后面的表达式)。
有趣的是,这个结构的书写有一个容易被忽略的细节:while(条件判断语句)后面必须跟一个分号。是的,这个分号不是可选的,而是必须的。
让我们看看一个标准的do...while循环长什么样:
do {
// 这里是循环体,包含要重复执行的代码
命令执行语句;
// 通常这里会有改变循环条件的代码
} while (条件判断语句); // 注意:这个分号必不可少!
这个结构与while循环有明显的不同:while循环的语法是while(条件) { 代码块 },后面没有分号。而do...while必须加上分号,这是PHP语法规定的一部分。
忘记这个分号会导致什么结果?语法错误。PHP解析器会毫不客气地报错,阻止代码继续执行。这个小细节常常成为初学者的绊脚石,但记住它其实很简单:do...while是一个完整的语句,需要分号结尾。
02 核心差异,执行顺序的哲学
do...while与while循环最本质的区别在于执行顺序。这个区别看似微小,却影响着循环的整个行为模式。
while循环采用“先判断,后执行”的策略。它像一位谨慎的将军,先侦察敌情(检查条件),再决定是否出兵(执行循环体)。如果一开始条件就不成立,循环体一次都不会执行。
do...while则完全相反,它奉行“先执行,后判断”的原则。这就像一位勇猛的先锋,不管三七二十一先冲上去打一仗(执行循环体),打完再看战局如何(检查条件),决定是否继续。
来看一个揭示这种差异的生动例子:
$aa = 0; // 初始化变量为0
// while循环示例
while($aa != 0) { // 条件:$aa不等于0
echo "不会被执行的内容"; // 这行代码永远不会执行
}
// do...while循环示例
do {
echo "被执行的内容"; // 这行代码会执行一次!
} while($aa != 0); // 条件同样是$aa不等于0
运行这段代码,你会发现while循环中的echo语句完全没有输出,因为初始条件($aa != 0)就是false,循环体直接被跳过。
而do...while循环中的echo语句却执行了一次,然后才检查条件,发现条件为假,于是循环结束。
03 流程图解,一目了然的执行路径
如果文字描述还不够直观,让我们通过流程图来看看这两种循环的执行路径。

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



