2009-11-20 32 views

risposta

73

Non è deprecato ed è improbabile che sia. È il modo standard, ad esempio, di far parte di un array o di un mirror di uno specchio apportato a un altro, invece di copiare i dati esistenti.

Si chiama assegnazione per riferimento, che, per citare il manuale, "means that both variables end up pointing at the same data, and nothing is copied anywhere".

L'unica cosa che è obsoleto con =& è "assegnando il risultato di new per riferimento" in PHP 5, che potrebbe essere fonte di confusione. new viene assegnato automaticamente per riferimento, quindi & è ridondante/obsoleto in $o = &new C;, ma non in $o = &$c;.


Dal momento che è difficile per la ricerca, si noti che =& (uguale commerciale) è lo stesso di = & (uguale spazio commerciale) ed è spesso scritto in modo tale che essa corre in altra variabile come $x = &$y['z']; o $x = &$someVar (e commerciale nome variabile del simbolo di dollaro). Esempio semplificato dalla documentazione:

$a = 3; 
$b = &$a; 
$a = 4; 
print "$b"; // prints 4 

Ecco un link utile per un detailed section on Assign By Reference in the PHP manual. Quella pagina fa parte di una serie di riferimenti: vale la pena dedicare un minuto alla lettura dell'intera serie.

+11

Ci vorrà più di un minuto per leggere l'intera serie – Pacerier

+3

nota a margine re: * "poiché è difficile cercare" *: http://symbolhound.com è tuo amico per cose come questa. – billynoah

21

Sono due operatori diversi. = è un incarico che probabilmente conosci. E & significa che la variabile deve essere letta per riferimento piuttosto che per valore.

+51

Mi dispiace ma è troppo semplicistico. $ a = & $ b significa rendere la variabile $ a riferirsi alla stessa cosa che $ b fa ora. Dopo questo, $ a = 5; risulterà anche in $ b con un 5. Tuttavia il link di riferimento potrebbe essere interrotto da $ b = & $xyz; o non impostato ($ b); A quel punto $ a sarà l'unica variabile che sa dove è la cella che contiene il 5. Inoltre, fai attenzione che se imposti $ a usando = &, devi usare = e la prossima volta (o unset ($ a)) per cambiare il link di riferimento di $ a, in particolare $ a = NULL; non interromperà il collegamento, sostituirà solo il 5 con null; – Don

+7

@Don: Grazie per l'elaborazione. Posso dire che sei un programmatore C. – Asaph

+6

I secondo quello che dice Don. Ma non direi che questo è troppo semplicistico. Direi che è sbagliato. – Artefacto

5
$x = &$y['z']; 

ha anche l'effetto di creare $y['z'] se non esiste, e impostandola null.

Questo impedisce messaggi di errore che potresti aver voluto leggere. Non ho ancora trovato documentazione su questo; possibilmente nuovo in 5.3, per quello che ne so.

Problemi correlati