Cuestión : Paso de órdenes por valor

Entiendo que el PHP pasa nativo variables por valor, no por referencia (a menos que se pasan las instrucciones de hacer así pues, e.g., usar el operador del signo "&"). el

So si tengo una función que vuelva un arsenal después de procesarlo varias veces, es yo que consigue funcionamiento reducido (o apenas usar práctica pobre), haciendo algo similar: process_list del

function ($list) {
$list = array_slice ($list, $from, $len);
$list = some_sort_function ($list, $sorts);
$list = some_filter_function ($list, $filters);
$list de vuelta; ¿

Am I del
} que crea varios duplicados perdidos usar el antedicho?  Debo mencionar que $list no es apenas un arsenal - esa fuerza antedicha de la función del ejemplo se utilice para procesar varios diversos grupos de datos, ésa pudo o no pudo tener cualquier cosa en campo común.  Es psuedo-código, pero pienso represento la pregunta fundamental mejor que la más longitud situation.

TYIA
class= del

Respuesta : Paso de órdenes por valor

En este caso, toda lo que usted es ahorro es una operación de la copia del arsenal original.
Las 2 líneas pasadas son porqué el paso por valor es normalmente preferred, después

arsenal complicado grande de $some_dataset = de //
$processed = process_list ($some_dataset);

Usted termina normalmente para arriba con 2 órdenes, $some_dataset y $processed, que son diferentes.
Si el process_list toma un arsenal por referencia, después esas dos líneas terminan realmente para arriba con $some_dataset y $processed que son 2 COPIAS iguales los órdenes (no la referencia, copia por valor).
Las asignaciones del arsenal son siempre copia-por-valor, a menos que y se utilizan para copiar la referencia.

el array_slice por sí mismo crea una copia del subconjunto.
Las 2 funciones de la clase también vuelven nuevos órdenes.
Usted es probablemente mejor apenas de pegarse al paso por valores a menos que usted lo entienda realmente.

FWIW, ahorrar una operación de la sola copia, las 2 líneas pasadas sería

arsenal complicado grande de $some_dataset = de //
process_list ($some_dataset); // y continúa utilizando $some_dataset después de esta línea
Otras soluciones  
 
programming4us programming4us