foreach内部变量的特性

php的foreach语法的判定结构内部有个特点:

as后跟的变量定义范围是全局范围,即是说会替换掉foreach结构之前定义的同名变量,例如:

$array = array(1,2,3,4,5,6,7);
foreach ($array as $array){
    echo $array;
    $a = 1;
}
var_dump($array);
echo $a;


result:

1234567

int 7
1

如例所示,foreach结束后,foreach内部最后给予$array变量的值将会替换掉foreach之前已经定义好的值。

但是这里有个蹊跷,为什么既然会替换掉之前定义的同名变量,在foreach的过程中,却不会有错误中止,就在进行第二次循环的时候,$array数组应该已经变成简单数值型了。

基于这个例子结果,证明php的foreach判定结构内的来源数组在做提取时会做一份拷贝为foreach专用,当foreach结束时,这份拷贝会被清除,但是在foreach的过程中,foreach的来源数组自动指向这份只存在内存中的拷贝,无论在foreach过程中对源数组做什么变更,在foreach结束之前都不会影响到foreach按照原来的数组运转。

因此,为了减少变量使用和代码简洁的目的,在foreach结束后不会再使用到源数组的前提下,可以考虑foreach判定体内提取出的数组单项命名为与源数组同名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值