2012-01-27 10 views
11

Tengo el siguiente código. Quiero cambiar $ b para usarlo de nuevo con valores. Si lo hago, también cambia $ a. ¿Cómo puedo asignar un valor a $ b nuevamente después de asignarlo previamente como una referencia a $ a?PHP eliminar "referencia" de una variable.

$a = 1; 
$b = &$a; 

// later 
$b = null; 

Respuesta

12

ver explicación en línea

$a = 1;
$b = &$a; Ahora $ b y $ a se convierte en la misma variable con solo 2 nombres diferentes
unset($b); $ b nombre desaparecido, desaparecido del contexto Pero $ a sigue disponible
$b = 2; Ahora $ b es como una nueva variable con un nuevo valor. Comenzando nueva vida.

7
$a = 1; 
$b = &$a; 

unset($b); 
// later 
$b = null; 
3

En primer lugar: Creación de una referencia de $a a $b crea una conexión (por la falta de una palabra mejor) entre las dos variables, por lo $a cambiar cuando $b cambios es exactamente la forma en que está destinado a trabajar.

Por lo tanto, asumiendo que usted quiere romper la referencia, la manera más fácil ist

unset($b); 
$b="new value"; 
5

La respuesta por @xdazz es correcta, pero sólo para añadir el siguiente gran ejemplo de la PHP Manual lo que da una idea de lo PHP lo está haciendo bajo el capó.

En este ejemplo, puede ver que $bar dentro de la función foo() es una referencia estática a una variable de ámbito de función.

desarmado $bar elimina la referencia pero no desasigna la memoria:

<?php 
function foo() 
{ 
    static $bar; 
    $bar++; 
    echo "Before unset: $bar, "; 
    unset($bar); 
    $bar = 23; 
    echo "after unset: $bar\n"; 
} 

foo(); 
foo(); 
foo(); 
?> 

El resultado del ejemplo sería:

Before unset: 1, after unset: 23 
Before unset: 2, after unset: 23 
Before unset: 3, after unset: 23 
+0

Buen ejemplo de lo difícil que podría ser esto. – dmikam

Cuestiones relacionadas