2012-01-17 20 views
6

Duplicar posible:
are arrays in php passed by value or by reference?php array assign copiando valor o por referencia?

oí que PHP puede seleccionar el modo de asignar matrices, depende del tamaño de la matriz. Puede asignar copiando el valor (como cualquier tipo escalar) o por referencia.

PHP siempre asigna matriz a las variables copiando un valor, como se dice en el manual.

O puede asignar por referencia. ?

<?php $a = array(1,2,3); ?> 
+0

simplemente que desean saber si es posible asignar una nueva matriz, ¿referencia? ¿O quieres saber si hay alguna forma de configurarlo para hacerlo automáticamente? – jprofitt

+0

Quiero saber, que a veces el motor de PHp puede pasar $ a = array (1,2,3); $ b = $ a; por referencia sin el signo '&'. – RusAlex

Respuesta

12

No puede asignar algo por referencia a menos que se hace referencia a algo que ya existe. Igualmente, no puedes copiar algo que no existe.

lo que este código:

$a = array(1,2,3); 

... ni copias o referencias - sólo se crea una nueva matriz llena de valores, ya que los valores se especificaron literalmente.

Sin embargo, este código:

$x = 1; 
$y = 2; 
$z = 3; 
$a = array($x,$y,$z); 

... copia los valores de $x, $y y $z en una matriz . Las variables utilizadas para inicializar los valores de la matriz todavía existen por derecho propio, y se pueden modificar o destruir sin afectar los valores en la matriz.

este código:

$x = 1; 
$y = 2; 
$z = 3; 
$a = array(&$x,&$y,&$z); 

... crea una matriz de referencias a $x, $y y $z (nótese la &). Si, después de ejecutar este código, modifico $x - digamos que le doy un valor de 4 - también modificará el primer valor en la matriz. Entonces, cuando use la matriz, $a[0] ahora contendrá 4.

Consulte this section del manual para obtener más información sobre cómo funciona la referencia en PHP.


Dependiendo de los tipos y los valores de las variables utilizadas como los miembros de la matriz, la operación de copia puede no ocurrir en el momento de la asignación aún cuando son asignados por valor. Internamente PHP utiliza copy-on-write en tantas situaciones como sea posible por razones de rendimiento y eficiencia de la memoria. Sin embargo, en términos del comportamiento en el contexto de su código, puede tratarlo como una simple copia.

1

Sí, utilizar &

$a = array(&$b, &$c, &$d); 
15

matrices Asignación por referencia es posible cuando la asignación de variables de matriz a otras variables:

// By value... 
$a = array(1,2,3); 
$b = $a; 
array_push($a, 5); 
print_r($b); 

// $b is not a reference to $a 
Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
) 

// By Reference 
$a = array(1,2,3); 
$b = &$a; // Here we assign by reference 
array_push($a, 5); 
print_r($b); 

// $b is a reference to $a and gets the new value (3 => 5) 
Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 5 
) 
Cuestiones relacionadas