PHP中while循环和for循环的区别?
Posted
技术标签:
【中文标题】PHP中while循环和for循环的区别?【英文标题】:Differences between a while loop and a for loop in PHP? 【发布时间】:2011-02-11 12:56:16 【问题描述】:我现在正在阅读一本关于 php 的电子书,作者指出,while 循环和 for 循环之间的区别在于 for 循环会计算它运行的次数。
所以拿这个:
<?php
for ($i = 1; $i < 10; $i = $i + 1)
print "Number $i\n";
?>
但这和
不一样吗<?php
$i = 1;
while ($i < 10)
$i = $i + 1;
print "Number $i\n";
?>
或者还有其他一些他没有指出的区别? (除了在不确定条件将保持多长时间时使用 while 循环,例如从数据库中选择行)
我的意思是,如果这是唯一的区别,我不能不使用 for 循环而使用 while 循环吗?
【问题讨论】:
【参考方案1】:“For”更清楚地表达了你的意图
从功能上讲,您的两个示例是相同的。但他们表达了不同的意图。
while
的意思是“我不知道这种情况会持续多久,但只要持续,就做这件事。”
for
表示“我有特定的重复次数供你执行。”
你可以在你的意思是另一个时使用一个,但它更难阅读代码。
for
在这里更可取的一些其他原因
更简洁,将有关循环的所有信息放在一个位置
它使$i
成为循环的局部变量
别忘了foreach
就我个人而言,我在 PHP 中最常使用的循环是 foreach
。如果你发现自己在做这样的事情:
for ($i=0; $i < count($some_array); $i++)
echo $some_array[$i];
...然后试试这个:
foreach ($some_array as $item)
echo $item;
打字速度更快,阅读更容易。
【讨论】:
【参考方案2】:你可以吗?是的,当然了。但是你是否应该是一个完全不同的问题。
for
循环在这种情况下更具可读性,并且绝对是几乎所有具有循环指令的语言中都会使用的约定。如果您使用while
循环,人们会想知道为什么您没有使用for
循环。
【讨论】:
所以主要是偏好问题?和标准化? 首选哪个循环取决于适合代码的内容,而不是您的个人喜好。如果您了解这两种循环的工作原理,您将通过经验了解在何处/何时使用每种类型。 虽然循环通常更容易出错,所以一般来说,在我的代码中,我只在多行初始化或不适合 for 循环声明的棘手问题时执行它们 @Rob:是的,尽管您可以将其写成$i++
和++$i
。如果它本身是一个声明,则没有行为差异。唯一的区别是它是否是表达式的一部分,例如 $j = $i++
和 $j = ++$i
。将++
放在末尾会使增量发生在 引用变量之后,因此$j
将具有$i
的值在 增量之前。在后一个示例中(++
在$i
之前),$j
将在增量之后 被赋予值。换句话说,在任一语句结束后,第一个语句使$j
等于$i-1
,第二个语句使$j
等于$i
。
@Rob:不是必须的,但考虑到输入++$i
和输入$i++
一样容易,为什么不呢? :)【参考方案3】:
在功能上,for
循环等价于while
循环;也就是说,每个都可以重写为另一个,而不会改变结果或副作用。但是,每个都有不同的内涵。 while
循环在条件成立时运行;情况是静态的,尽管情况会发生变化。 for
循环在序列上运行。区别对程序员很重要,但对程序不重要,就像变量名称的选择对程序员很重要,即使它们可以更改以生成功能等效的代码。根据具体情况,一种循环结构会比另一种更有意义。
【讨论】:
【参考方案4】:一个for循环
for (INIT; CONDITIONS; UPDATE)
BODY
基本上和这样结构的while循环相同:
INIT
while (CONDITIONS)
BODY
UPDATE
虽然您在技术上可以使用其中一种,但在某些情况下while
比for
效果更好,反之亦然。
【讨论】:
循环变量初始化。 $i = 1;在你的例子中。【参考方案5】:for() 和 While() 之间的主要区别在于我们必须定义限制或计数,但在 while() 循环中我们不定义限制或计数,直到到达最后一项才会起作用
FOR 循环 初始化可以在循环语句内或循环外。 它通常在迭代次数已知时使用。 条件是一个关系表达式。 当初始化和增量很简单时使用它。 for ( 初始化 ; 条件 ; 迭代 ) 声明;
WHILE 循环 初始化总是在循环之外。 它通常在迭代次数未知时使用。 条件可以是表达式或非零值。 它用于复杂的初始化。 而(条件) 声明;
【讨论】:
【参考方案6】:这是一个品味、个人喜好和可读性的问题。有时while
循环在逻辑上效果更好。有时,for
。
根据我的个人规则,如果我不需要变量初始化器,那么我使用while
。
但是foreach
循环以它自己的方式很有用。
另外,对于 PHP 的作用域,不在函数内部的所有变量都是全局的,无论您使用哪种循环控件,该变量都将在循环之后继续存在。
【讨论】:
那么用for循环,循环完成后变量会重置吗?还是我误会了? 在许多其他语言中,i 不会存在于 for 循环之外,尝试在循环之外访问它会导致错误。然而,在 PHP 中,i 将在声明后的函数范围内可用,无论在何处。 假设你的循环变量不存在于你的 for 循环之外。如果您想再次使用 $i,请务必在再次使用之前为其分配一个新值(重新初始化它)。否则,正如 Internet Friend 上面所建议的那样,您正在教自己一个坏习惯,在更严格的语言(例如 C 或 Java)中根本行不通。这就是“可变范围”的概念。 @Rob - 不在 PHP 中,但由于特定的硬范围语言(如 C 或 Java)如何解释变量初始化器几乎取决于该语言,for (int x = 5;;)
可能会或可能不会初始化x
到 for
块内。如果您需要循环外的变量,则使用int x; for (x=5;;)
以确保在父范围内声明变量会更安全。以上是关于PHP中while循环和for循环的区别?的主要内容,如果未能解决你的问题,请参考以下文章