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.
?>
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';
?>
<?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.