博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP的FOREACH作用域笔记
阅读量:6625 次
发布时间:2019-06-25

本文共 1434 字,大约阅读时间需要 4 分钟。

  hot3.png

// @author: huangfeng love 吴佳旻// 例子1$arr1 = array('a', 'b', 'c');foreach ($arr1 as $k => $v) {	echo $k . '-' . $v;}$v = 'd';echo $k; // 2echo $v; // dvar_dump($arr1);/*array  0 => string 'a' (length=1)  1 => string 'b' (length=1)  2 => string 'c' (length=1)*/// 例子2$arr2 = array('a', 'b', 'c');foreach ($arr2 as $k => &$v) {	echo $k . '-' . $v;}$v = 'd';echo $k; // 2echo $v; // dvar_dump($arr2);/*array  0 => string 'a' (length=1)  1 => string 'b' (length=1)  2 => &string 'd' (length=1)*/// 例子3$myfunc = function(){	$arr3 = array('a', 'b', 'c');	foreach ($arr3 as $k => $v) {		echo $k . '-' . $v;	}	$v = 'd';};var_dump($k);    // nullvar_dump($v);    // nullvar_dump($arr3); // null// 例子4$arr4 = array('1'=>'a', '2'=>'b', '3'=>'c');$arr5 = array('4'=>'x', '5'=>'y', '6'=>'z');foreach($arr4 as $k => $v) {	echo $k . '-' . $v; // 1-a(第一次) 2-b(第二次) 3-c(第三次)	// 4-x5-y6-z (三次都一样)	foreach ($arr5 as $k => $v) {		echo $k . '-' . $v;	}	echo $k . '-' . $v; // 6-z(第一次) 6-z(第二次) 6-z(第三次)}

PHP的作用域只有2种:

1、全局 可在任何位置通过$GLOBALS访问
2、函数/方法/Closure

结论:

- 只有在当前作用域下定义的元素才能在当前及以内的作用域中访问到,在其以外的作用域是访问不到的(结果是null);
- foreach并没有创建一个作用域(即它里面不算一个作用域),所以在foreach迭代的外面访问键值变量,能够得到其最后一次迭代的值;
- foreach临时创建的两个变量($k 和 $v),在之后被重新赋值时,并不会对原数组造成影响,所以可以放心地在同一个作用域下的多个foreach语句中对不同数组使用同样的$k和$v名称,而不用刻意改变成$k1, $v1;$k2, $v2
- 如果真的要让原数组的$k和$v值被重新赋值后对原数组也同样做出修改,那么就使用引用传值(&)
- 对于嵌套foreach,建议取不一样的键值名称,如$k1, $v1;$k2, $v2,以避免赋值污染

转载于:https://my.oschina.net/ecnu/blog/130161

你可能感兴趣的文章
Flash AS3 Loader的一些总结
查看>>
.net(vs2010)调试技巧
查看>>
哈希方法
查看>>
45个纯 CSS 实现的精美边框效果【附在线演示和源码】【下篇】
查看>>
js的逻辑 OR 运算符- ||
查看>>
[SQL Server]一次执行资料夹内的.sql 指令码
查看>>
SQLServer中的死锁的介绍
查看>>
【计算机视觉】粒子滤波跟踪
查看>>
hadoop集群扩展
查看>>
操作系统诊断
查看>>
[Compose] 19. Leapfrogging types with Traversable
查看>>
Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules
查看>>
2015年度新增开源软件排名TOP100
查看>>
设计模式 之 原型
查看>>
BZOJ 2456: mode(新生必做的水题)
查看>>
SSM实战——秒杀系统之高并发优化
查看>>
View State
查看>>
自旋锁spinlock解析
查看>>
【java.lang.UnsupportedClassVersionError】版本不一致出错
查看>>
Ubuntu16.04 安装RabbitMQ
查看>>