• User Attivo

    [Operatore] =&

    **Versione: PHP 4.0.4
    **
    Sintassi: =&

    I Riferimenti, sono metodi speciali che PHP usa per gestire le variabili e le interazioni tra queste.
    Prendiamo in esempio due variabili $a e $b:

    [php]
    $b = 5;
    $a = $b;

    echo $a; //Ris: 5
    echo $b; //Ris: 5
    [/php]

    $a ed $b sono due variabili indipendenti, in questo caso, entrambe assumono il valore 5.
    Se durante l'esecuzione modifico il valore di $a e lo pongo uguale a 6 viene:

    [php]
    $b = 5;
    $a = $b;

    echo $a; //Ris: 5
    echo $b; //Ris: 5

    $a = 6;

    echo $a; //Ris: 6
    echo $b; //Ris: 5
    [/php]

    Si nota subito che le due variabile anche se vengono ugualiate e contengono gli stessi valori ($a = $b) sono due oggetti indipendenti.
    Questo è uno dei metodi più semplici utilizzati per la gestione delle variabili in PHP.
    Con l'uso dei riferimenti, invece non succede più così.
    Quando si precende il nome di una variabile con il simbolo &, non si ottiene più il valore della variabile, ma un riferimento ad essa, l'equivalente dei puntatori in C.
    Con i riferimenti, una variabile diventa un alias di un'altra variabile ($a è l'alias di $b, oppure $a punta a $b).

    [php]
    $b = 5;
    $a =& $b; //Altra Sintassi: $a = & $b; oppure $a = &$b;
    [/php]

    Ora le due variabili $a e $b condividono lo stesso spazio di memoria, quindi un cambiamento al valore dell'una si riflette sul valore dell'altra.

    [php]
    $b = 5;
    $a =& $b;

    echo $a; //Ris: 5
    echo $b; //Ris: 5

    $a = 10;

    echo $a; //Ris: 10
    echo $b; //Ris: 10
    [/php]

    Il concetto di fondo è quello di chiamare lo stesso oggetto variabile con due nomi differenti.

    Per eliminire un alias di un oggetto, si utilizza la funzione unset();
    Avendo definito più nomi ad un oggetto, con la funzione unset(); non si perde il dato, ma solo un puntatore, quindi se le variabile $a e $b puntano allo stesso oggetto, se "distruggo" $b, mi rimane sempre $a per recuperare l'oggetto desiderato.

    [php]
    $b = 5;
    $a =& $b;

    echo $a; //Ris: 5
    echo $b; //Ris: 5

    $a = 10;
    echo $a; //Ris: 10
    echo $b; //Ris: 10

    unset($b);
    echo $a; //Ris: 10
    echo $b; //Ris: VARIABILE NON DEFINITA
    [/php]

    L'utilità dei riferimenti si vede nell'utilizzo di funzioni.
    Passare un riferimento di una variabile come argomento della funzione è molto più veloce e permette di allocare meno spazio in memoria rispetto alla normale copia della variabile.

    [php]
    function funzione(&$valore)
    {
    $valore += 5;
    }

    $a = 10;
    funzione($a);

    echo $a; //Ris: 15
    [/php]

    Di conseguenza, anche una funzione può restituire un puntatore ad una variabile.

    [php]
    function &funzione()
    {
    static $valore = 0; //STATIC: $valore ha visibilità (può essere usata) solo all'interno della funzione
    $valore++;
    return $valore;
    }

    echo funzione(); //Ris: 1
    echo funzione(); //Ris: 2
    echo funzione(); //Ris: 3

    $a =& funzione();
    $a = 10;

    echo funzione(); //Ris: 11
    [/php]

    In conclusione, l'utilizzo dei riferimenti porta benefici come la riduzione della memoria utilizzata dal server, in particolare nell'uso di grandi strutture dati come gli array.