Questione : Passando gli allineamenti dal valore

Capisco che il PHP passi natale le variabili dal valore, non da riferimento (a meno che le istruzioni siano passate agire in tal modo, per esempio, using l'operatore di segno &). il

So se ho una funzione che restituisce un allineamento dopo l'elaborazione esso varie volte, sono io che ottengo la prestazione riduttrice (o appena using pratica difficile), facendo qualcosa di simile: process_list del

function ($list) {
$list = array_slice ($list, $from, $len);
$list = some_sort_function ($list, $sorts);
$list = some_filter_function ($list, $filters);
$list di ritorno;

Am I del
} che genera parecchi duplicati sprecati using il di cui sopra?  Dovrei accennare che $list non è appena un allineamento - quella forza di cui sopra di funzione di esempio be è usata per procedare vari gruppi di dati, quella potrebbe o non potrebbe avere qualche cosa il in comune.  È psuedo-codice, ma penso rappresento la domanda fondamentale più meglio della più lunghezza situation.

TYIA
class= del

Risposta : Passando gli allineamenti dal valore

In questo caso, tutto che siate risparmio è un funzionamento della copia dell'allineamento originale.
Le ultime 2 linee sono dopo perché passare dal valore è normalmente preferred,

grande allineamento complicato di // = di $some_dataset
$processed = process_list ($some_dataset);

Vi concludete normalmente in su con 2 allineamenti, $some_dataset e $processed, di cui tutt'e due sono differenti.
Se il process_list prende un allineamento da riferimento, quindi quelle due linee realmente si concludono in su con $some_dataset e $processed che sono 2 COPIE degli stessi allineamenti (non il riferimento, copia dal valore).
Le assegnazioni di allineamento sono sempre il copia-da-valore, a meno che & è usata per copiare il riferimento.

il array_slice da sè genera una copia del sottoinsieme.
Le 2 funzioni di specie inoltre restituiscono i nuovi allineamenti.
Siete probabilmente appena attaccare più ricco al passaggio dai valori a meno che realmente lo capiate.

FWIW, conservare un funzionamento della singola copia, le ultime 2 linee sarebbe

grande allineamento complicato di // = di $some_dataset
process_list ($some_dataset); // e continua ad usare $some_dataset dopo questa linea
Altre soluzioni  
 
programming4us programming4us