Foreach por referência

Categoria: PHP
Publicado em 09 de Junho de 2011

A partir do PHP 5 é possível usar foreach por referência para alterar o conteúdo de um array, por exemplo.

O cuidado a se tomar é que a variável referência sempre deve ser destruída após o foreach, pois ela possui a referência para o último elemento do array, e se usada posteriormente pode alterar os valores do array original.

Por exemplo:

1
2
3
4
5
$a = array('casa', 'hotel', 'apartamento');
foreach ($a as $k => &$v) {
 
}
unset($v);

Veja que no exemplo acima $v é uma variável referência do elemento atual de $a. Caso o seu conteúdo for alterado, os elementos do array $a serão alterados.

Após o término do foreach o unset() foi usado para destruir a variável $v. Isso é correto e SEMPRE deve ser usado, pois caso tivéssemos um código parecido sem o unset(), as informações do array $a se comprometeriam, como no próximo caso:

1
2
3
4
5
6
7
8
9
$a = array('casa', 'hotel', 'apartamento');
foreach ($a as $k => &$v) {
 
}
 
foreach ($a as $k => $v) {

}
 

Após o término do primeiro foreach() o unset não foi usado sobre a variável referência $v. Portanto, $v continua sendo uma referência para o último elemento de $a. No segundo foreach, para cada iteração do loop o valor do elemento atual de $a é atribuído a $v, e consequentemente ao último elemento de $a.

O não uso do unset() após foreach por referência pode levar a erros de difícil detecção e debug.

 

Copyright © Fernando Hidemi Uchiyama 2010 - Todos os direitos reservados