2012-01-07 12 views

Respuesta

8

Esto significa que se pasa por referencia en lugar de valor ... IE cualquier manipulación de la variable afectará al original. Esto difiere en valor donde cualquier modificación no afecta el objeto original.

Esto se solicita muchas veces en stackoverflow.

+1

Para agregar, "por referencia" significa que es referencia al mismo bloque de memoria asignada a la variable que se refiere a – Prof83

+1

como se opone a "por valor", lo que significa que PHP crea una copia de la variable en un nuevo bloque de memoria. – Kaii

+0

Hay dos maneras de cómo se pasa la referencia en el código de ejemplo de preguntas, [esbocé ambas] (http://stackoverflow.com/a/8769347/367456). – hakre

4

Se utiliza para aplicar los cambios en única instancia de matriz a matriz principal ..

como:

// Ahora los cambios afectan costumbre matriz $ wishesarray

foreach ($wishesarray as $id => $categoriy) { 
     $categoriy++; 
} 
print_r($wishesarray); //It'll same as before.. 

Pero ahora cambia se reflejará en la matriz $ wisharray también

foreach ($wishesarray as $id => &$categoriy) { 
     $categoriy++; 
} 
print_r($wishesarray); //It'll have values all increased by one.. 
36

Este ejemplo le mostrará la diferencia

$array = array(1, 2); 
foreach ($array as $value) { 
    $value++; 
} 
print_r($array); // 1, 2 because we iterated over copy of value 

foreach ($array as &$value) { 
    $value++; 
} 
print_r($array); // 2, 3 because we iterated over references to actual values of array 

Mira la documentación de PHP para esto aquí: http://pl.php.net/manual/en/control-structures.foreach.php

+0

¿La sintaxis _by reference_ a menudo no causa errores como: "No se pueden crear referencias hacia/desde los desplazamientos de cadena"? –

1

Para el código en su pregunta, no puede haber una respuesta específica dada porque el bucle foreach interior está vacía.

Lo que veo con su código es que el interior foreach itera sobre una referencia en lugar de la forma común.

le sugiero que tome una lectura de la foreach PHP Manual page, que cubre los cuatro casos:

foreach($standard as $each); 

foreach($standard as &$each); # this is used in your question 

$reference = &$standard; 
foreach($reference as $each); 

$reference = &$standard; 
foreach($reference as &$each); # this is used in your question