Avatar ·

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