所以我今天正在制作一个表格,碰巧给一个变量的名称与后来在 foreach 循环中使用的名称相同。令我惊讶的是,foreach 循环的声明覆盖了变量的先前声明。
对我来说,这似乎很奇怪,因为我希望将as $value => $a
两个变量的范围限制在foreach
循环中。
这就是发生的事情:
php > $a = 5;
php > $b = array(1,2,3);
php > foreach($b as $value => $a){ echo $a; };
123
php > echo $a;
3
这是我所期望的:
php > $a = 5; //define a in outer scope
php > $b = array(1,2,3);
php > foreach($b as $value => $a){ echo $a; /* This $a should be the one from the foreach declaration */ };
123
php > echo $a; //expecting inner scope to have gone away and left me to get the outer scoped $a
$a
如果我用作循环的键,也会发生同样的事情foreach
,更可怕的是这个宝石:
php > $a = 5;
php > $b = array(1,2,3);
php > foreach($b as $a => $b){ var_dump($b); }
int(1)
int(2)
int(3)
php > var_dump($b) // => int(3)
它覆盖了$b
数组,但仍然循环遍历它的成员。
总而言之,这似乎有点古怪。我的问题是,我究竟在哪里可以找到指定这种行为是预期的文档/手册?