Ponteiros, as variáveis de referência

Primeiramente precisamos entender o que é uma variável, então o que é? 

Variável é um nome amigável que damos para um espaço reservado na memória que receberá alguma informação que desejamos. Exemplo: 
 
$nome = "Andafter.org";
?>
 
Este trecho de código diz ao compilador do php o seguinte: Memória, reserve pra mim um espaço em sua memória e guarde dentro dele a string "Andafter.org". Quando pedimos isso, o computador executa essas ações e retorna um endereço que este espaço ficou alocado, o endereço de memória.
 
Sabendo agora o que é um endereço de memória, vejamos o código abaixo: 
 
$nome = "google.com"; 
$linkNome = &$nome;
$linkNome = "andafter.org";
 
echo $nome; //aparecerá andafter.org
?>
 
Na 1a linha de código temos uma associação normal, conforme vimos anteriormente.
na 2a linha de código falamos que $linkNome receberá o endereço de memória da variável $nome, ou seja, $linkNome será um ponteiro para a var $nome.
Na 3a linha modificamos a var $linkNome que na verdade é uma referência a variável $nome alterando assim o conteúdo da variável que está apontando.

Onde usar ponteiros? 

Ponteiros são usados juntos com funções, sendo estes em forma de parâmetros ou em retornos.
Exemplo:
 
$frutas = ["maça","pera","abacate"];
 
sort($frutas);
 
var_dump($frutas);
?>
 
A função sort, que ordena um array, recebe uma referência de variável e faz a modificação a partir da referência informada.
Veja a assinatura do método sort: 
 
bool sort ( array &$array [, int $sort_flags ] ) 

Porque usar ponteiros?

Os ponteiros evitam cópias desnecessárias para os escopos locais das funções. Toda vez que uma função recebe um parâmetro, ela mesma cria uma cópia da variável em memória para trabalhar dentro de si mesma, veja nos exemplos abaixo:
 
Exemplo 1: variáveis duplicadas em memória: 
 
 
function dobraValor($valor){
        return $valor * 2;
}
 
$valor = 2;
 
$valor = dobraValor($valor);
?>
 
Explicação: Neste exemplo teremos 2 variáveis $valor; uma de escopo global e uma de escopo local dentro da função ambas contendo o mesmo conteúdo.
 
Exemplo 2: uma variável e trabalhando com referência
 
 
function dobraValor(&$valor){
        $valor = $valor * 2;
}
 
$valor = 2;
 
dobraValor($valor);
?> 
 
Explicação: Neste caso, temos apenas 1 variável $valor, a de escopo global. A função dobraValor recebe apenas uma referência à variável de escopo global não criando portanto uma cópia da $valor para acesso local.

Conclusão

Deixamos mais performáticos nossos sitemas trabalhando com ponteiros mas também devemos tomar cuidado ao modificar essas variáveis por referência pois qualquer atribuição de valor a ela, modificaremos a variável de fora também o que pode gerar muita dor de cabeça na hora identificar o porque a variável está dobrando o valor sem vc. mandar. 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *