Come da ultimi post del 3d sulle SERIE, qualcuno mi dà un po' di luce sul come è giusto passare un array ad una function?
Per indirizzo (con la "&") o per valore?
Come da ultimi post del 3d sulle SERIE, qualcuno mi dà un po' di luce sul come è giusto passare un array ad una function?
Per indirizzo (con la "&") o per valore?
per ora ho trovato questo:
fonte: http://www.tuxjournal.net/php3.html pragfrafo 6.7...
Il passaggio delle variabili può avvenire per valore o per riferimento. Il passaggio per valore implica la copia del valore della variabile nell’argomento. PHP effettua di default il passaggio per valore. In questo modo qualunque operazione effettuata sul parametro copiato non si ripercuoterà sulla variabile o l’oggetto passato. Il passaggio per riferimento non effettua la copia ma prende solo il riferimento alla variabile, ovvero solo il suo indirizzo. Tutte le operazioni che la funzione effettuerà sulla variabile passata si ripercuoterà anche sulla variabile originale.
Per essere più chiari, se abbiamo bisogno che la funzione modifichi l’oggetto che gli passiamo adotteremo un passaggio per riferimento, se invece siamo solo interessati al risultato che la funzione ci può restituire sarà meglio optare per un passaggio per valore.
quindi oltre che al discorso della memoria utilizzata c'è anche questo discorso da valutare.
Il passaggio per riferimento, sarà più ottimale, se così vogliamo dire, dal punto di vista della memoria in quanto utilizza appunto la stessa locazione di memoria per la variabile passata e la variabile originale. Mentre il passaggio per valore creando appunto una copia del valore della variabile utilizzerà una nuova locazione e quindi nuova memoria.
Quindi penso sia a discrezione del programmatore, in base all'uso che deve fare poi delle variabili, decidere se passare un argomento per riferimento o per valore.
Tornando quindo all'esempio dell'altro thread, l'array lo passerei ancora per riferimento in quanto non mi serve nessuna copia della variabile e non andandola a modificare avrei poi 2 copie dello stesso array che occuperebero il doppio della memoria. Poi certo, per un array di 10 elementi non cambia assolutamente nulla a livello di prestazioni, ma giusto per non avere doppioni sceglierei ancora quel metodo.
p.s. ti ringrazio, perché con la tua domanda mi hai fatto approfondire un paio di cose che stavano arrugginendo nella mia mente![]()
Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone
Sì, certamente tutto è come atteso.
Ma perchè io ho letto della futura intenzione di non supportare più il passaggio per indirizzo (riferimento)? Quella malattia dell'altro 3d ce l'ho davvero io?![]()
non lo so
su php.net ho trovato semmai questo: Nota: Dal PHP 5 i valori di default possono essere passati per riferimento, quindi piuttosto che non supportarlo qui parlano di settarlo come default. Di più non so![]()
http://it.php.net/manual/it/functions.arguments.php
Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone
i valori di default non è il settaggio di default del passaggio parametri, attenzione.Originariamente inviato da 13manuel84
non lo so
su php.net ho trovato semmai questo: Nota: Dal PHP 5 i valori di default possono essere passati per riferimento, quindi piuttosto che non supportarlo qui parlano di settarlo come default. Di più non so![]()
http://it.php.net/manual/it/functions.arguments.php
I parametri di default sono quelli che specificate come impliciti nelle funzioni:
function funzione($a = 5)
Dal 5 è possibile settarli per riferimento, il che è diverso da dire che d'ora in poi il passaggio di parametri è per riferimento di default.
![]()
si lol c'hai ragioneOriginariamente inviato da skidx
i valori di default non è il settaggio di default del passaggio parametri, attenzione.
I parametri di default sono quelli che specificate come impliciti nelle funzioni:
function funzione($a = 5)
Dal 5 è possibile settarli per riferimento, il che è diverso da dire che d'ora in poi il passaggio di parametri è per riferimento di default.
![]()
![]()
l'avevo letto e interpretato male, sorry
Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone