Como passar argumentos por referência no PHP
No PHP, os argumentos de funções são passados por valor por padrão. Isso significa que qualquer modificação dentro da função não afeta a variável original. No entanto, podemos passar argumentos por referência, permitindo que a função altere diretamente o valor da variável original.
Sintaxe para passar argumentos por referência
Para passar um argumento por referência, usamos o símbolo &
antes do nome do parâmetro:
<?php
function dobrarValor(&$numero) {
$numero *= 2;
}
$valor = 5;
dobrarValor($valor);
echo $valor; // Saída: 10
?>
Neste exemplo, a função dobrarValor()
recebe $numero
por referência e modifica diretamente $valor
, dobrando seu valor.
Diferença entre passagem por valor e por referência
<?php
function alterarTexto($texto) {
$texto .= " modificado";
}
$mensagem = "Texto original";
alterarTexto($mensagem);
echo $mensagem; // Saída: Texto original (sem alteração)
?>
Aqui, $mensagem
não é alterada porque foi passada por valor.
Agora, se passarmos por referência:
<?php
function alterarTexto(&$texto) {
$texto .= " modificado";
}
$mensagem = "Texto original";
alterarTexto($mensagem);
echo $mensagem; // Saída: Texto original modificado
?>
Agora a variável $mensagem
é alterada dentro da função, pois foi passada por referência.
Quando utilizar passagem por referência no PHP?
Passar argumentos por referência no PHP pode ser muito útil para modificar diretamente variáveis dentro de funções, evitando retornos desnecessários. No entanto, seu uso deve ser feito com cautela, pois pode tornar o código mais difícil de depurar. O ideal é utilizá-lo em situações onde realmente é necessário modificar a variável original, como em funções de manipulação de arrays e otimizações de desempenho.
Algumas aplicações:
- Funções que precisam modificar valores originais sem retorná-los
- Otimização de memória ao trabalhar com grandes arrays
- Manipulação de strings e estruturas de dados complexas
- Implementação de algoritmos que exigem alterações diretas nas variáveis
Dicas para quem está começando
- Use
&
antes do nome do parâmetro para passá-lo por referência. - Evite o uso excessivo de referências, pois pode dificultar a depuração.
- Se precisar apenas do valor modificado, prefira retornar o valor em vez de modificar a variável original.
- Quando usar referências em arrays, tenha cuidado para não modificar valores inesperadamente.
- Em funções recursivas, avalie se a referência é realmente necessária para evitar loops infinitos.
Contribuições de Rafael Nogueira