php for循环bug,PHP中使用foreach和引用导致程序BUG的问题介绍

foreach 循环实例用法,在PHP中的foreach是用来进行循环对一个数组的所有元素,作者的foreach基本语法如下:

FOREACH ($array_variableas$value)

{

[code to execute]

}

or

FOREACH ($array_variableas$key=>$value)

{

[code to execute]

}

在这两种情况下,多次[代码执行]将被处死是等于在$ array_variable数组元素的个数,让我们来看一个例子。假设我们有下面的代码段:

$array1=array(1,2,3,4,5);

FOREACH ($array1as$abc)

{

print "new value is ".$abc*10 ."
";

}

输出结果

newvalue is 10

newvalue is 20

newvalue is 30

newvalue is 40

newvalue is 50

上面是我们对foreach常常使用的方法,下面再看实例

$a=array(1, 2);

$b=array(11, 12);

foreach($aas&$r){

}

foreach($bas$r){

}

echo$a[1];// 输出 12

两个的循环的本意可能是: 第一个循环需要在循环中修改元素的内容, 所以使用引用; 但第二个循环只是把 $r 当作一个临时变量. 可是, 为什么 $a[1] 的值发生了改变呢?

当对 $a 的迭代完成后, $r 是 $a[1] 的引用, 改变 $r 的值, 就是改变 $a[1]. 这时, 你可以会奇怪, 代码中并没有修改 $r, 也没有修改 $a[1] 呀?

其实, foreach 是操作的是数组的拷贝, 所以, 后一个迭代相当于:

for($i=0;$i

$r=$b[$i];// 修改了 $r! 相当于 $a[1] = $b[$i];

}

为了避免这种情况, 应该在第一个迭代之后, 执行 unset($r);从当前环境中删除 $r 这个变量(引用变量).即使不是前面的例子, 在第一个迭代之后, 仍然十分可能再执行类似的语句:$r = 123;

循环变量一般是临时变量, 同一个变量名在代码不同的地方表示不同的东西, 但变量的作用域又存在于循环之外. 这就是这种作用域规则的坏处, 加上”变量不声明即使用”的坏外, 再加上变量无类型的坏处.

所以, 在 PHP 中使用引用变量, 应该在引用使用完之后, 应该 unset(). 所有变量在使用之前应该先 unset().

总结:PHP 引用有些类似 C 语言指针, 但一些重要的特性和 C 语言指针不一样, 如果不注意, 会导致程序 BUG. foreach 操作的是数组或对象的拷贝, 但 PHP5, 可以使用引用操作对象元素本身

(责任编辑:admin)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值