Spiegazioni sui riferimenti
PHP Manual

Restituzione per riferimento

La restituzione per riferimento è utile quando si vuole usare una funzione per trovare quale variabile un riferimento dovrebbe limitare. Non utilizzare il ritorno per riferimento per incrementare le prestazioni, l'engine è capace di ottimizzare il codice per proprio conto. Restituire valori per riferimento solo se si hanno validi motivi tecnici. Per restituire per riferimento, si usa questa sintassi:

<?php
class foo {
    public 
$value 42;

    public function &
getValue() {
        return 
$this->value;
    }
}

$obj = new foo;
$myValue = &$obj->getValue(); // $myValue è un riferimento a $obj->value, che vale 42.
$obj->value 2;
echo 
$myValue;                // stampa il nuovo valore di $obj->value, es. 2.
?>
In questo esempio, la proprietà dell'oggetto restituito dalla funzione getValue viene impostata, non la copia, come sarebbe stato senza l'uso della sintassi del riferimento.

Nota: Diversamente dal passaggio di un parametro, bisogna utilizzare & in entrambi i posti - nella dichiarazione per indicare che si vuole restituire per riferimento, e non per copia come di consueto, e per indicare nella chiamata, il collegamento del riferimento, piuttosto che l'usuale assegnazione che verrebbe fatta per $myValue.

Nota: Se si tenta di restituire un valore per riferimento da una funzione con la sintassi: return ($this->value); questo non funzionerà poiché si sta tentando di restituire per riferimento il risultato di un' espressione, e non una variabile. Da una funzione, si possono restituire per riferimento solo le variabili. A partire da PHP 4.4.0 e PHP 5.1.0, un errore E_NOTICE è lanciato se il codice cerca di restituire un'espressione dinamica o un risultato dell'operatore new.

Per utilizzare il riferimento restituito, occorre usare l'assegnazione per riferimento:

<?php
function &collector() {
  static 
$collection = array();
  return 
$collection;
}
$collection = &collector();
$collection[] = 'foo';
?>
Al fine di passare il riferimento a un'altra funzione che richiede un riferimento si può usare questa sintassi:
<?php
function &collector() {
  static 
$collection = array();
  return 
$collection;
}
array_push(collector(), 'foo');
?>

Nota: Si noti che array_push(&collector(), 'foo'); non funzionerà, ma creerà un errore fatale.


Spiegazioni sui riferimenti
PHP Manual