2012-06-17 10 views
6

Sto programmando un client API Web in PHP che analizza i dati CSV in array associativi e voglio proteggere i miei utenti dalla duplicazione dei dati quando si utilizzano questi array.La copia su scrittura impedirà la duplicazione dei dati sugli array?

I miei utenti non scriveranno mai su questi array (teoricamente potrebbero farlo ma non ha senso nella pratica).

Ora la mia domanda è ... se i miei utenti passano questi array come argomenti ai metodi, il meccanismo di copy-on-write di PHP preverrà la duplicazione dei dati o qualsiasi metodo che non accetti esplicitamente un riferimento a un array ricevere una copia completa della matrice?

risposta

9

Copia su scrittura come suggerisce il nome significa che nessuna variabile viene copiata fino a quando non viene scritto qualcosa; Finché non viene modificato un singolo byte nella variabile passata, PHP si occupa di evitare duplicati inutili automaticamente e senza la necessità di utilizzare riferimenti espliciti grazie a questo meccanismo.

This article spiega in dettaglio come viene implementato nel codice sorgente di PHP, e come suggerisce l'articolo, utilizzando xdebug si può facilmente controllare le variabili non vengono duplicati con la funzione xdebug_debug_zval.

Inoltre su this answer qui su SO è più su Copia-su-Scrivi.

1

Se non li si modifica, gli array non verranno copiati.

+1

Grazie per la vostra pronta risposta, se avete tempo sarei molto grato se voleste approfondire l'argomento. Gli array di ricezione funzioneranno con i puntatori? O potresti forse fornire un link a maggiori informazioni che corroborino la tua risposta? – thwd