【发布时间】:2013-06-09 08:46:33
【问题描述】:
【问题讨论】:
-
它声明了多个变量。在这种情况下
$j和$n2。
【问题讨论】:
$j 和$n2。
PHP 继承了C++-like 语法。
C++-like 语言通常具有代码块或控制结构的范围可见性,例如:
#include <iostream>
using namespace std;
int main() {
int a = 0; // main scope;
int b = 5; // main scope;
if(a != b){
int c = a + b; // if scope;
// a, b, c visible.
}
// a and b visible, but c - not visible.
for(int i = 10; i < 20; i++){
// for-loop scope:
// i, a and b visible
cout << "i: " << i << endl;
}
// a and b visible, but i - not visible.
return 0;
}
PHP 没有这样的特性,但继承了语法规则(以及大部分 C++ 代码约定)。
<?php
header('Content-Type: text/plain');
for($i = 0, $j = 10; $i < 10; $i++, $j += 2){
echo "{$i} + {$j} = ", $i + $j, PHP_EOL;
}
?>
等价于
<?php
header('Content-Type: text/plain');
$j = 10;
for($i = 0; $i < 10; $i++){
echo "{$i} + {$j} = ", $i + $j, PHP_EOL;
$j += 2;
}
?>
变量$i 和$j 将在for-loop 之后的任何地方都可以访问,但在for-loop 标题部分中声明它们可能是为了显而易见(有人说,这些变量肯定会被使用在这个周期中)。它也更短。
注意:您也可以对for-loop 的每个标题部分使用,。
UPDv1:
for-loop 声明:
for(initialization_section; condition_section; post_execution_section){
// actions
}
每个部分可以包含表达式,但不能包含其他控制结构。
1) 初始化部分:
应该包含在循环开始之前执行的表达式。
如果有多个单独的表达式,则应以逗号, 分隔。
在任何for-loop 迭代之前执行。
for($i = 0, $j = 1; $i < 10; $i++){
echo "{$i} + {$j} = ", $i + $j, PHP_EOL;
}
结果:
0 + 1 = 1
1 + 1 = 2
2 + 1 = 3
3 + 1 = 4
4 + 1 = 5
5 + 1 = 6
6 + 1 = 7
7 + 1 = 8
8 + 1 = 9
9 + 1 = 10
2) 条件部分:
应包含检查循环是否继续或停止的表达式。如果有多个单独的操作,则应以逗号, 分隔。
在每次for-loop 迭代之前执行。
for($i = 1, $j = 0; $i++, $j < 10; $j++){
echo "{$i} + {$j} = ", $i + $j, PHP_EOL;
}
结果:
2 + 0 = 2
3 + 1 = 4
4 + 2 = 6
5 + 3 = 8
6 + 4 = 10
7 + 5 = 12
8 + 6 = 14
9 + 7 = 16
10 + 8 = 18
11 + 9 = 20
for-loop 的这一部分中的逗号会导致忽略该部分之前的所有表达式,除了最后一个(如 @icktoofay 提到的)。
for($i = 0, $j = 1; $i < 1, $j < 5; $i++, $j++){
echo "{$i} + {$j} = ", $i + $j, PHP_EOL;
}
结果:
0 + 1 = 1
1 + 2 = 3
2 + 3 = 5
3 + 4 = 7
不管$i < 1 是false 用于第二次迭代。它可以用作默认的预执行语句。
3) post_execution_section:
应该包含在循环体动作执行后要执行的表达式。如果有多个单独的操作,则应以逗号, 分隔。
在每次for-loop 迭代之后执行。
for($i = 0; $i < 10; $i++, $i *= 2){
echo $i, PHP_EOL;
}
结果:
0
2
6
此外,for-loop 的每个部分都可能是空的(什么也不做),保留分号 ; 分隔符:
for(;;){
// infinite loop
}
【讨论】:
, 甚至可以用在条件部分,尽管你很少在实际代码中找到它。
, 通常替换为 &&。是的,你是对的。
, 做的事情与&& 完全不同;它们不可互换。 , 做了一些你很少想要的事情:它计算第一个操作数,丢弃结果,然后计算后一个操作数。当您只关心结果时,例如在某种情况下,它很少有用。它仅在用于其副作用时才有用,例如在作业中。当在用于条件的纯表达式中没有副作用时,很少使用,:我只看到它用于混淆。尽管如此,它仍然可以使用,并且不能与&& 互换。
循环第一部分中的逗号只是分隔变量声明。
本质上它只是声明了两个变量$j=0和$n2=sizeof($quotes[$i]['methods']),但在循环构造函数中而不是在循环构造函数之前。
【讨论】: