Operatore di assegnazione dei riferimenti in PHP, = &


Risposte:


121

Non è deprecato ed è improbabile che lo sia. È il modo standard per, ad esempio, fare parte di un array o modifiche speculari di oggetti apportate a un altro, invece di copiare i dati esistenti.

Si chiama assegnazione per riferimento , che, per citare il manuale, "significa che entrambe le variabili finiscono per puntare agli stessi dati, e nulla viene copiato da nessuna parte" .

L'unica cosa che è sconsigliata con =&è "assegnare il risultato newper riferimento" in PHP 5 , che può essere fonte di confusione. newviene assegnato automaticamente per riferimento, quindi &è ridondante / deprecato in $o = &new C;, ma non in $o = &$c;.


Poiché è difficile da cercare, nota che =&uguale a e commerciale ) è uguale a = &uguale a spazio e commerciale ) ed è spesso scritto in modo tale da incorrere nell'altra variabile come $x = &$y['z'];o $x = &$someVar(e commerciale nome della variabile con il segno del dollaro ). Esempio semplificato dai documenti:

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

Ecco un comodo collegamento a una sezione dettagliata su Assign By Reference nel manuale PHP . Quella pagina fa parte di una serie di riferimenti: vale la pena dedicare un minuto alla lettura dell'intera serie.


8
nota a margine re: "dal momento che è difficile da cercare" : symbolhound.com è tuo amico per cose come questa.
billynoah

1
@billynoah Wow! symbolhound è ora aggiunto in modo permanente alla mia cassetta degli attrezzi.
Parapluie

26

Sono due operatori diversi. =è un compito come probabilmente saprai. E &significa che si dovrebbe accedere alla variabile per riferimento piuttosto che per valore.


60
Mi dispiace ma questo è troppo semplicistico. $ a = & $ b significa fare in modo che la variabile $ a si riferisca alla stessa cosa che fa $ b in questo momento. Dopo questo, $ a = 5; risulterà anche che $ b avrà un 5. Tuttavia il collegamento di riferimento potrebbe essere interrotto da $ b = & $ xyz; o non impostato ($ b); In quel momento $ a sarà l'unica variabile che sa dove si trova la cella che contiene 5. Inoltre, fai attenzione che se imposti $ a usando = &, devi usare = & la prossima volta (o disimpostare ($ a)) per cambiare il collegamento di riferimento di $ a, in particolare $ a = NULL; non interromperà il collegamento, sostituisce solo il 5 con null;
Don

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

8
Secondo quello che dice Don. Ma non direi che questo sia troppo semplicistico. Direi che è sbagliato.
Artefacto

@Don dovresti davvero pubblicare il tuo commento come risposta.
Adam il

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

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

Ciò impedisce i messaggi di errore che potresti aver voluto leggere. Non ho ancora trovato documentazione su questo; forse nuovo in 5.3, per quanto ne so.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.