Maison > développement back-end > tutoriel php > foreach 传引用的时候有bug?

foreach 传引用的时候有bug?

WBOY
Libérer: 2016-06-06 20:31:22
original
1107 Les gens l'ont consulté

$a = array(1,2,3);
var_dump($a);
foreach($a as &$b){}
var_dump($a);
foreach($a as $b){
var_dump($b);
}

下面是5.2到7.0的结果

array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
array(3) { [0]=> int(1) [1]=> int(2) [2]=> &int(3) }
int(1) int(2) int(2)

早期版本的输出请看http://3v4l.org/PXsWr

请问这是不是php的一个bug?

回复内容:

$a = array(1,2,3);
var_dump($a);
foreach($a as &$b){}
var_dump($a);
foreach($a as $b){
var_dump($b);
}

下面是5.2到7.0的结果

array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
array(3) { [0]=> int(1) [1]=> int(2) [2]=> &int(3) }
int(1) int(2) int(2)

早期版本的输出请看http://3v4l.org/PXsWr

请问这是不是php的一个bug?

提问之前 难道不应该先搜索一下的嘛....参考 foreach 指针

产生这个现象的原因是因为,两次foreach都用了$b,而foreach的过程是先进行赋值,所以在第二次循环的第一步,会把数组的第一项复制给指向最后一项的指针,因此导致了数组的最后一项改变了

$b在第二个foreach的时候,还是相当于&$a[2],所以惨剧发生了 -- $a[2]被修改了

这就是偶不喜欢使用foreach,而喜欢使用array_walk的原因:

<code>$a = array(1,2,3);
var_dump($a);
array_walk($a, function(&$b){
   // do something
});
var_dump($a);
array_walk($a, function($b){
    var_dump($b);    // => int(1) int(2) int(3)
});
</code>
Copier après la connexion
Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal