php 结束for循环_PHP 之 for 循环

本文通过回顾PHP for循环的基本原理,挑战了一个常见误解:for循环中break语句对$i值的影响。作者通过实例探讨了for循环表达式的执行时机,特别关注了break在循环后的执行情况。同时,文章还涉及了PHP递增/递减运算符的细节。
摘要由CSDN通过智能技术生成

for 循环在很多的编程语言中都被支持,是一种常见的循环用法,也算是我们学习每门编程语言中最基础的知识点。但正是因为基础,所以才容易被忽略,久而久之,甚至会误解。本文 PHPHa 就对 PHP 中的 for 循环进行复习,不求温故而知新,但求能矫枉过正。

首先看下 PHP 手册中对 for 循环的描述。(PHP 4, PHP 5, PHP 7)

for 循环是 PHP 中最复杂的循环结构。它的行为和 C 语言的相似。 for 循环的语法是:

for (expr1; expr2; expr3)

statement

第一个表达式(expr1)在循环开始前无条件求值(并执行)一次。

expr2 在每次循环开始前求值。如果值为 TRUE,则继续循环,执行嵌套的循环语句。如果值为 FALSE,则终止循环。

expr3 在每次循环之后被求值(并执行)。

每个表达式都可以为空或包括逗号分隔的多个表达式。表达式 expr2 中,所有用逗号分隔的表达式都会计算,但只取最后一个结果。expr2 为空意味着将无限循环下去(和 C 一样,PHP 暗中认为其值为 TRUE)。这可能不像想象中那样没有用,因为经常会希望用有条件的 break 语句来结束循环而不是用 for 的表达式真值判断。

其实是非常基础的知识点,对于以上官方描述,相信大家一扫而过而不会有任何的疑问。

那么为什么文章开头我却说本文是要来矫枉过正呢?这是因为 PHPHa 最近在补充数据结构与算法相关知识点,在基于理论分析的基础上,看到快速排序算法的代码实现,对其 for 循环中的某一个变量的值产生了怀疑。

快速排序的代码就不贴了,目前就看下面的简化代码:// [A]

for ($i = 0; $i < 5; ++ $i) {

continue;

}

// 5

echo $i;

// [B]

for ($i = 0; $i < 5; ++ $i) {

break;

}

// 0? 1?

echo $i;

那么,上面的 [A] [B] 两段代码,最终输出的 $i 的值分别是多少呢?其实对于 [A] 段没什么疑问,肯定是 5,问题在于 [B] 段代码的输出值,到底是 0 还是 1。

对于这个问题可以回到上文中官方描述的内容,也就是对于 for 循环里面第三个表达式的描述,如下:expr3 在每次循环之后被求值(并执行)

重点就在于 循环之后 这四个字。再回到 [B] 段代码,其中第 1 次循环就遇到了 break,并没有循环成功,不满足 循环之后 的条件,因此,$i 的值不能递增,那么依然是 0。

借着这个问题,咱们顺便再来说下 PHP 中的递增与递减,即 $i++ / ++$i / $i-- / --$i 相关知识点。例子名称效果

++$a前加$a 的值加一,然后返回 $a

$a++后加返回 $a,然后将 $a 的值加一

--$a前减$a 的值减一,然后返回 $a

$a--后减返回 $a,然后将 $a 的值减一

递增与递减类似,因此就只说下递增的两种区别即可。$a = 1;

$b = $a++; // 执行后:$a==2 $b==1

$b = ++$a; // 执行后:$a==3 $b==3

以上,就是本文的全部内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值