Capa

Table of Contents

  1. Entendendo o problema
  2. Como o PHP não deixa que isso seja um problema

Entendendo o problema

Para começar este post, vamos ver um pequeno exemplo do que acontece quando atribuímos o valor de um array à outro e alteramos o primeiro elemento do array.

1
2
3
4
5
6
<?php
$series = ['The Walking Dead', 'Game of Thrones', 'Breaking Bad'];
$boasSeries = $series;
$series[0] = 'Prison Break';
print($series); // 0 - Prison Break, 1 - Game of thrones, 2 - Breaking Bad
print($boasSeries); // 0 - The Walking Dead, 1 - Game of thrones, 2 - Breaking Bad

Bem como a maioria das variáveis simples, os arrays são passados e atribuídos por valor.

Explicando melhor, quando fizemos $boasSeries = $series, aparentemente nós criamos uma cópia do array original ($series). É possível assumir isso porquê fizemos uma alteração no primeiro elemento do array e essa mudança não foi refletida no segundo array.

Se o PHP realmente fizesse essa cópia do array, os desenvolvedores ficaram bastante preocupados com 2 coisas:

  • Consumo de memória alto, já que quando se atribui um array a outro, o php cria uma cópia e coloca em memória.
  • Impacto que essa constante duplicação pode causar na velocidade da aplicação.

Mas para a nossa sorte, o PHP sabe como cuidar disso.

Como o PHP não deixa que isso seja um problema

O PHP usa algo conhecido como tecnologia copy-on-write. Isso significa que o array é na verdade atribuído por referência e que uma cópia do array só é feita se algum dos arrays for alterado em algum momento depois.

Então na verdade quando fizemos $boasSeries = $series, ainda tinha apenas uma cópia do array na memória até o ponto em que alteramos o primeiro elemento do array $series.


Até a próxima!