Assegnazione per Riferimento
    
     Attraverso questa prima operazione, i riferimenti PHP permettono di
     far sì che due variabili facciano riferimento allo stesso contenuto. Questo significa, che scrivendo:
     
     $a e 
$b
     puntano allo stesso contenuto.
     
Nota: 
      
       $a e $b sono completamente
       uguali, ma $a non è un puntatore a
       $b o vice versa,
       $a e $b puntano semplicemente nello
       stesso posto.
      
     
    
    Nota: 
     
      Se si assegna, si passa o si restituisce per riferimento una variabile non definita,
      questa verrà creata.
      
       Example #1 Uso dei riferimenti con variabili non definite
       
<?php
function foo(&$var) { }
foo($a); // $a is "created" and assigned to null
$b = array();
foo($b['b']);
var_dump(array_key_exists('b', $b)); // bool(true)
$c = new StdClass;
foo($c->d);
var_dump(property_exists($c, 'd')); // bool(true)
?>
        
       
     
    
    
     La stessa sintassi può essere usata con funzioni che restituiscono
     riferimenti, e con l'operatore new (a partire da PHP
     4.0.4 e prima di PHP 5.0.0):
     
     Da PHP 5, 
new
     restituisce automaticamente un riferimento, quindi
     usare 
=& in questo contesto è deprecato e
     produce un messaggio 
E_DEPRECATED in PHP 5.3 e
     successivi, e un messaggio 
E_STRICT nelle versioni precedenti.
     (Tecnicamente, la differenza consiste nel fatto che, in PHP 5, le variabili object, come pure le
     risorse, sono semplici puntatori ai veri dati dell'oggetto, quindi questi
     riferimenti a oggetto non sono "riferimenti" nel senso usato in precedenza (alias).
     Per maggiori informazioni, vedere 
Oggetti
     e riferimenti.
    
    
Avviso
     
      Se si assegna un riferimento ad una varibile dichiarata global
      dall'interno di una funzione, il riferimento sarà visibile solo all'interno della funzione stessa.
      Si può evitare tutto ciò utilizzando la matrice $GLOBALS.
      
       Example #2 Riferimenti di varibiali globali all'interno di una funzione
       
<?php
$var1 = "Example variable";
$var2 = "";
function global_references($use_globals)
{
    global $var1, $var2;
    if (!$use_globals) {
        $var2 =& $var1; // visible only inside the function
    } else {
        $GLOBALS["var2"] =& $var1; // visible also in global context
    }
}
global_references(false);
echo "var2 is set to '$var2'\n"; // var2 is set to ''
global_references(true);
echo "var2 is set to '$var2'\n"; // var2 is set to 'Example variable'
?>
        
       
      Si pensi a 
global $var; come ad una scorciatoia per 
$var
        =& $GLOBALS['var'];. Quindi assegnando altri riferimenti
      a 
$var si cambia soltanto il riferimento della variabile locale.
     
    
 
    Nota: 
     
      Se si assegna un valore ad una variabile con riferimenti in una istruzione
      foreach, anche la variabile a cui si fa riferimento sarà modificata.
      
       Example #3 Riferimenti e istruzione foreach
       
<?php
$ref = 0;
$row =& $ref;
foreach (array(1, 2, 3) as $row) {
    // esegue qualcosa
}
echo $ref; // 3 - ultimo elemento dell'array
<?
        
       
     
    
    
     Anche se non sono esattamente un'assegnazione per riferimento, le espressioni create
     con il costrutto
     array() si possono
     comportare come tali anteponendo & all'elemento
     da aggiungere. Esempio:
     
    
    
     Si noti che i riferimenti all'interno degli array sono potenzialmente pericolosi.
     Un'assegnazione normale (non per riferimento) di un riferimento nella parte destra
     dell'espressione non treasforma in riferimento la variabile nella parte sinistra, ma i riferimenti
     all'interno degli array sono comunque conservati in questo tipo di assegnazioni. Questo si applica
     anche alle chiamate a funzione dove l'array è passato per valore. Esempio:
     
     In altre parole, da un punto di vista dei riferimenti, il comportamento degli array è definito
     elemento per elemento; il comportamento di ogni singolo elemento
     è indipendente dallo stato di riferimento dell'array che lo contiene.
    
   
 
   
    Passaggio per Riferimento
    
     Il secondo utilizzo del riferimento è il passaggio di una variabile
     per riferimento. Questo si fa dichiarando una variabile locale di una funzione e
     una variabile nell'ambito della chiamata del riferimento con lo stesso
     contenuto. Esempio:
     
     $a assume il valore 6. Questo accade perché
     nella funzione 
foo, la variabile
     
$var si riferisce allo stesso contenuto di
     
$a. Si vedano le spiegazioni più dettagliate per 
passaggio per
     riferimento.