Looking for php Keywords? Try Ask4Keywords

PHP Passa per riferimento


Esempio

Ciò consente di passare una variabile facendo riferimento a una funzione o elemento che consente di modificare la variabile originale.

Passare-per-riferimento non è limitato alle sole variabili, il seguente può anche essere passato per riferimento:

  • Nuove affermazioni, ad es. foo(new SomeClass)
  • Riferimenti restituiti da funzioni

Array

Un uso comune di "passing-by-reference" è di modificare i valori iniziali all'interno di un array senza andare al punto di creare nuovi array o sporcare il tuo spazio dei nomi. Il passaggio per riferimento è semplice come il precedente / prefisso della variabile con un & => &$myElement .

Di seguito è riportato un esempio di sfruttamento di un elemento da un array e semplicemente aggiungendo 1 al suo valore iniziale.

$arr = array(1, 2, 3, 4, 5);

foreach($arr as &$num) {
    $num++;
}

Ora, quando sfrutti qualsiasi elemento all'interno di $arr , l'elemento originale verrà aggiornato man mano che il riferimento è stato aumentato. Puoi verificare questo:

print_r($arr);

Nota

Si dovrebbe prendere nota quando lo sfruttamento passa per riferimento all'interno di anelli. Alla fine del ciclo precedente, $num mantiene ancora un riferimento all'ultimo elemento dell'array. Assegnandolo al post loop finirà per manipolare l'ultimo elemento dell'array! Puoi assicurarti che ciò non avvenga unset() 'it post-loop:

$myArray = array(1, 2, 3, 4, 5);

foreach($myArray as &$num) {
   $num++;
}
unset($num);

Quanto sopra ti assicurerà di non incorrere in alcun problema. Un esempio di problemi che potrebbero riguardare questo è presente in questa domanda su StackOverflow .


funzioni

Un altro uso comune per il passaggio per riferimento è all'interno delle funzioni. La modifica della variabile originale è semplice come:

$var = 5;
// define
function add(&$var) {
    $var++;
}
// call
add($var);

Che può essere verificato facendo echo alla variabile originale.

echo $var;

Esistono varie restrizioni relative alle funzioni, come indicato di seguito dai documenti PHP:

Nota: non vi è alcun segno di riferimento su una chiamata di funzione - solo sulle definizioni di funzione. Solo le definizioni di funzione sono sufficienti per passare correttamente l'argomento per riferimento. A partire da PHP 5.3.0, riceverai un avviso che dice che "pass-by-reference" è deprecato quando usi & in foo (& $ a) ;. A partire dalla versione 5.4.0 di PHP, il riferimento al passaggio delle chiamate è stato rimosso, quindi l'utilizzo di tale funzione genererebbe un errore irreversibile.