您的位置:首页 > 编程语言 > PHP开发

转-PHP —— 为什么不要在 FOREACH 中使用变量引用

2014-03-27 10:28 447 查看
4000

最近在浏览同事之前写的代码的时候,发现大量的变量引用使用在 foreach 中:

$a
 
array
(
‘a‘, ‘b‘, ‘c‘, ‘d‘);
foreach
(
$a
 
as
 
&
$v
)
{
    
$v
 
$v
 
.
‘_bar‘;
}
var_dump(
$a
);
这种写法有个好处,就是可以直接通过改变引用变量 $v 的值,来直接改变数组的值。但是显然,这里会带来一个问题:

$a
 
array
(
'a'
'b'
'c'
'd'
);
foreach
(
$a
 
as
 
&
$v
)
{
    
$v
 
$v
 
'_bar'
;
}
$v
 
'foobar'
;
var_dump(
$a
);
通常 foreach 变量都只希望是一个作用域在 foreach 内部的局部临时变量。但是当不慎在后面用了同名的临时变量时,数组的内容会不预期的被改变。就如同上面的代码那样,最终结果 $a[3] = ‘foobar’ 而不是预期的 $a[3] = ‘d_bar’。这对于程序的正确执行时一个隐患,不能让程序的正确性维系在程序员足够细心的不使用重名临时变量,这一线上。

解决方法有两种。

第一种,直接使用数组的键值来修改数组内容:

$a
 
array
(
'a'
'b'
'c'
'd'
);
foreach
(
$a
 
as
 
$k
 
=> 
$v
)
{
    
$a
[
$k
]
= 
$v
 
'_bar'
;
}
$v
 
'foobar'
;
var_dump(
$a
);
第二种,注销掉 foreach 中使用的临时变量:

$a
 
array
(
'a'
'b'
'c'
'd'
);
foreach
(
$a
 
as
 
&
$v
)
{
    
$v
 
$v
 
'_bar'
;
}
unset(
$v
);
$v
 
'foobar'
;
var_dump(
$a
);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: