Referências PHP permitem fazer duas variáveis se referirem ao
mesmo conteúdo.
A analogia mais próxima é a dos arquivos e seus nomes em sistemas
UNIX: nomes de variáveis são o caminho completo dos arquivos,
enquanto o conteúdo da variável são os dados desse arquivo. Assim,
referências pode ser tomadas como os links físicos dentro do
sistema de arquivos UNIX. Ou seja:
<?php
$a = &$b;
// aqui $a e $b apontam para a mesma variável.
?>
Logo $a e $b são completamente iguais aqui, mas não
porque $a está apontando para $b ou vice-versa, mas sim porque $a
e $b apontam para o mesmo lugar.
A mesma sintaxe pode ser utilizada com funções que retornam
referências e com o operador new (a partir do PHP 4.0.4):
$bar = & new fooclass();
$foo = & find_var ($bar);
Porém vale lembrar que a NÃO utilização do operador & causará
a cópia do objeto. Se você utiliza $this em classes, ele
operará na instância atual do objeto. A assimilação sem & irá copiar
a instância (o objeto em si) e $this irá operar na cópia, podendo
não ser esse procedimento sempre desejável. Normalmente você precisará
trabalhar com uma instância única, seja por motivos de performance ou
de consumo de memória.
Você pode utilizar o operador @ para esconder quaisquer erros
em construtores na forma @new, mas isto não funciona quando
utilizada a instrução &new. Esta é uma limitação da Zend Engine
e irá gerar um erro de interpretação (parser error).
A segunda coisa que referências permitem é passar variáveis por
referência. Isto é feito marcando uma variável local de uma função e
a variável do escopo chamador como referências ao mesmo conteúdo.
Exemplo:
<?php
function foo (&$var)
{
$var++;
}
$a=5;
foo ($a);
echo $a;
?>
Isso fará que $a seja 6. Isto acontece porque na função foo
a variável $var se refere ao mesmo conteúdo que $a.