Uma referência é um nome alternativo que permite que duas variáveis diferentes podem escrever para o mesmo valor. Existem três operações que podem ser executadas com referências: atribuir por referência, passar por referência e retornar por referência.
Atribuir por referência
A referência é atribuído pela colocação de um comercial (&) antes da variável que se encontra vinculado.
$x = 5; $r = &$x; // r é uma referência a x $s =& $x; // sintaxe alternativa
A referência torna-se então um alias para essa variável e pode ser usado exatamente como se fosse a variável original.
$r = 10; // atribuir valor a $r/$x echo $x; // "10"
Passar por referência
Em PHP, os argumentos da função são por padrão passados por valor. Isto significa que uma cópia local da variável é passada, por isso, se a cópia for alterado, ele não vai afetar a variável original.
function myFunc($x) { $x .= ' World'; }
$x = 'Hello';
myFunc($x); // valor de x é passado
echo $x; // "Hello"Para permitir que uma função para modificar um argumento deve ser passado por referência. Isto é feito através da adição de um e comercial antes do nome do parâmetro na definição da função.
function myFunc(&$x) { $x .= ' World'; }
$x = 'Hello';
myFunc($x); // referência para x é passado
echo $x; // "Hello World"Variáveis de objeto também são por padrão passados por valor. No entanto, o que realmente é passado é um ponteiro para os dados do objeto, não os dados em si. Assim, as alterações membros do objeto afetará o objeto original, mas substituindo a variável de objeto com o operador de atribuição só vai criar uma variável local.
class MyClass { public $x = 1; }
function modifyVal($o){
$o->x = 5;
$o = new MyClass(); // novo objeto local
}
$o = new MyClass();
modifyVal($o); // ponteiro para objeto é passado
echo $o->x; // "5"Em contraste, quando uma variável de objeto é passado por referência não só é possível alterar suas propriedades, mas também para substituir o objeto inteiro e ter a mudança de volta para propagar a variável de objeto original.
class MyClass { public $x = 1; }
function modifyRef(&$o){
$o->x = 5;
$o = new MyClass(); // Novo Objeto
}
$o = new MyClass();
modifyRef($o); // referência ao objeto é passado
echo $o->x; // "1"Retorno por referência
Uma variável pode ser atribuída a uma referência de uma função por ter essa função de retorno por referência. A sintaxe para retornar uma referência é colocar o comercial antes do nome da função. Em contraste com a passagem por referência, o “&” é também é usado ao chamar a função a fim de vincular a referência.
class MyClass{
public $val = 10;
function &getVal(){
return $this->val;
}
}
$obj = new MyClass();
$myVal = &$obj->getVal();Tenha em mente que as referências não deve ser utilizado apenas por motivos de desempenho, como a engine dp PHP vai cuidar de tais otimizações por conta própria. Utilize apenas referências quando você tem uma necessidade de um comportamento do tipo de referência.












