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.

Na Documentação

http://php.net/manual/pt_BR/language.references.php

Deixe um comentário

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

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.