Originariamente Scritto da
meL.rtcw
json scoprirai più avanti cos'è e a che serve, se non ti stufi prima, gh. Cmq permette di comprimere in una stringa oggetti e array senza fare cicli o altro. Se vuoi dare un'occhiata:
http://json.org/
Direi che ci siamo.
Allora... è giusto, nel senso che io ho capito che hai capito più o meno come funziona.
Un pochino più in dettaglio ci son due concetti in gioco: il contenuto di una zona di memoria e l'indirizzo di questa zona di memoria.
Quando si definisce una variabile, ad esempio $pippo = 5, 5 è il contenuto di una zona di memoria, $pippo è l'alias di quella zona di memoria e &$pippo è l'indirizzo della zona di memoria (passatemela oh voi lurkers).
Se poi tu crei un'altra variabile, $pluto, se esegui $pluto = $pippo è uguale a fare $pluto = 5, quindi si va ad occupare una nuova zona di memoria slegata da quella referenziata da $pippo e ci si copia dentro il valore.
Invece, se fai $pluto = &$pippo, $pluto diventa un altro alias della zona di memoria dove è contenuto 5. Quindi ogni modifica che fai a $pluto si ripercuote su $pippo e viceversa.
Si può modificare il contenuto di un array per mezzo di un foreach senza usare la &?
Certo :
Codice:
$colori = array('rosso', 'bianco', 'verde', 'giallo');
foreach ($colori as $key => $colore) {
$colori[$key] = strtoupper($colore);
}
echo json_encode($colori);
Questo è un caso particolare, cmq sì è quello il motivo.
Per come gestisce php le variabili (dal mio punto di vista, in modo totalmente alogico) diventa difficile controllare i side-effect che una & comporta e quindi bisogna usarla con coscienza e quando davvero serve e si sa cosa si fa.
In ogni caso, dalla mia -poca- esperienza di php ti posso assicurare che riesci a far tutto senza la & anche se, di fatto, ci perdi un pelo di efficienza. D'altronde bisogna contestualizzare, utilizzi PHP per fare un sito internet, non devi programmare l'applicazione che calcola la traiettoria di rientro dell'apollo 11, per cui utilizzare 500KB in più di memoria perché non metti la & isn't a big deal