foreach括号中的变量作用域是什么?

帖子列表 发布于 2013/05/02 15:01
阅读 1K+
收藏 0
PHP

foreach($arr as $k => $v)

$arr, $k, $v的生命周期是什么?

加载中
0
deleted
deleted

引用来自“HandMU”的答案

可以自己测试下, $arr作用于可以到foreach外,$k$v应该是在foreach内,测试一下便知。

不, $k和$v同样生存在foreach外, 这个特性配合引用还衍生了一个著名的坑

<?php

$array = array('day'=>'today');

foreach($array as $k=>&$v){
    echo $k,'=>',$v,"\n";
}

var_dump($array);

$v = "tomorrow";

var_dump($array);

Nixus
Nixus
像这样的坑,在PHP中还有哪些呢? 有没有一个专门整理好的PHP的坑文档? 开发中,如何有效避免这些未知的坑呢?
苏生不惑
苏生不惑
回复 @勇者天空 : 原来如此,但是一般很少用&,一般什么时候用到呢?反正我是没用过
HandMU
HandMU
嗯,我也只是自认为而已,还是实践证明一切。
yifanes
yifanes
回复 @勇者天空 : oo,谢谢昂,我再消化消化
deleted
deleted
回复 @yifanes @苏翰 : 其实就是引用导致的, 正常的foreach($array as $val)里$val仅仅是一个副本,对$val赋值并不会改变$array本身; 而foreach($array as &$rel)里是引用, 循环完毕,$rel指向$array[-1], 出了foreach block如果忘记unset这个引用变量而又进行赋值的话, 就会改变$array[-1]
下一页
1
hylent
hylent

$arr 必须是已经声明的 并且实现了内部接口 Traversable

$k $v 是在包含了这段代码的作用域中

php的作用域只有2种

1、全局 可在任何位置通过$GLOBALS访问

2、函数/方法/Closure

帖子列表
帖子列表
thx
0
欣儿
欣儿

声明周期是什么?

PS:不是$arr没有数据后就自动结束吗?

帖子列表
帖子列表
是生命周期,打错了,改过来了。 比如一个文件有很多foreach ,或者foreach里有嵌套的foreach,那么条件表达式($arr as $k => $v)里的这三个变量在什么时候可以取同样的名称?
0
HandMU
HandMU
可以自己测试下, $arr作用于可以到foreach外,$k$v应该是在foreach内,测试一下便知。
返回顶部
顶部