2010-08-21 8 views

risposta

13

L'operatore = & funziona con riferimenti e non valori. La differenza tra $var2=$var1 e $var2=&$var1 è visibile in questo caso:

$var1 = 1; 
$var2 = $var1; 
$var1 = 2; 
echo $var1 . " " . $var2; // Prints '2 1' 

$var1 = 1; 
$var2 =& $var1; 
$var1 = 2; 
echo $var1 . " " . $var2; // Prints '2 2' 

Quando si utilizzano i = & operatore non lo dici a $ var2 "prendere il valore di $ var1 ora" invece si dice qualcosa del tipo " Il tuo valore sarà archiviato esattamente nello stesso posto in cui il valore di $ var1 ". Quindi ogni volta che cambi il contenuto di $ var1 o $ var2, vedrai la modifica nelle due variabili.

Per maggiori informazioni sguardo sul PHP.net

EDIT: Per la parte globale, è necessario utilizzare $GLOBALS["a"] =& $local; Cf. documentazione.

+0

controllare il mio esempio, thx. – lovespring

+0

"Se si assegna un riferimento a una variabile dichiarata globale all'interno di una funzione, il riferimento sarà visibile solo all'interno della funzione. È possibile evitarlo utilizzando l'array $ GLOBALS." Controlla il link che ti ho dato, c'è un'intera sezione sui globals. –

5

Quando si esegue $var2 = $var1, PHP crea una copia di $var1 e la inserisce in $var2. Tuttavia, se si esegue $var2 = &$var1, non viene eseguita alcuna copia. Invece, PHP rende $var2 punto a $var1 - ciò significa che si finisce con due variabili che puntano allo stesso stesso.

Un esempio:

$var1 = "Foo"; 
$var2 = $var1; // NORMAL assignment - $var1's value is copied into $var2 
$var3 = &$var1; // NOT normal copy! 

echo $var2; // Prints "Foo". 
echo $var3; // Also prints "Foo". 

$var1 = "Bar"; // Change $var1. 

echo $var2; // Prints "Foo" as before. 
echo $var3; // Now prints "Bar"! 
+0

wow, clonazione della variabile. pulito. non lo sapevo. – DMin

+0

grazie, Stephen. – lovespring

+0

"PHP rende $ var2 point a $ var1 - ciò significa che si finisce con due variabili che puntano esattamente alla stessa cosa." ti stai contraddicendo; e solo la seconda parte è vera. – Artefacto

1
global $a; 

Ciò equivale a:

$a = &$GLOBALS['a']; 

Quando si assegna $a un nuovo riferimento, stai cambiando $a e non $GLOBALS['a'].

Cosa ti aspetti di ricevere in uscita?

$GLOBALS['a']=1; 

function test() 
{ 
    $a='foobar';   // $a is a normal variable 
    $a=&$GLOBALS['a']; // same as: global $a; 
    $local=2; 
    $a=&$local; 
} 

test(); 

echo $a; 
+0

grazie, strager – lovespring

Problemi correlati