Como o foreach realmente funciona no PHP? Análise detalhada com exemplos
Olá a todos! Já escrevo em PHP há alguns meses, mas ainda não entendo completamente como o foreach funciona. Na documentação está escrito que é uma "forma conveniente de percorrer arrays", mas tenho dúvidas para as quais não encontro respostas.
Por exemplo, sei que ao usar foreach com referência (&$value) é possível modificar os elementos do array. Mas por que, após o loop, a variável $value ainda referencia o último elemento? Isso causa bugs inesperados.
Também me interessa: o que acontece "por baixo dos panos"? Uma cópia do array é criada a cada foreach? Ouvi dizer que o PHP usa o mecanismo copy-on-write, mas não entendo como isso funciona no contexto de loops.
Aqui está um exemplo que me confunde:
```php
$array = [1, 2, 3];
foreach ($array as &$value) {
$value *= 2;
}
// Agora $array = [2, 4, 6]
// Mas se após o loop fizermos:
foreach ($array as $value) {
echo $value;
}
// Resultado: 2 4 4 em vez de 2 4 6! Por quê?
```
Também notei que ao usar foreach em arrays aninhados