2009-11-20 30 views

Respuesta

73

No está en desuso y es poco probable que lo sea. Es la forma estándar de, por ejemplo, hacer parte de una matriz o cambios de espejo de objeto hechos a otra, en lugar de copiar los datos existentes.

Se llama asignación por referencia, que, para citar el manual, "means that both variables end up pointing at the same data, and nothing is copied anywhere".

La única cosa que se obsoleta con =& se "Asignar el resultado de new por referencia" en PHP 5, lo que podría ser la fuente de cualquier confusión. new se asigna automáticamente por referencia, por lo que & es redundante/obsoleto en $o = &new C;, pero no en $o = &$c;.


Puesto que es difícil de buscar, observar que =& (es igual signo) es lo mismo que = & (es igual signo espacio) y, a menudo se escribe de tal manera que se encuentra con la otra variable como $x = &$y['z']; o $x = &$someVar (y nombre de variable de signo de dólar). Ejemplo simplificado de la documentación:

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

He aquí un enlace a mano a un detailed section on Assign By Reference in the PHP manual. Esa página es parte de una serie de referencias: vale la pena tomarse un minuto para leer toda la serie.

+11

Llevará más de un minuto leer toda la serie – Pacerier

+3

nota al margen re: * "ya que es difícil buscar" *: http://symbolhound.com es su amigo para cosas como esta. – billynoah

21

Son dos operadores diferentes. = es asignación como probablemente sepa. Y & significa que se debe acceder a la variable por referencia en lugar de por valor.

+51

Lo siento, pero esto es demasiado simplista. $ a = & $ b significa hacer que la variable $ a se refiera a lo mismo que $ b hace ahora. Después de esto, $ a = 5; también resultará en que $ b tenga un 5. Sin embargo, el enlace de referencia puede estar roto por $ b = & $xyz; o unset ($ b); En ese momento $ a será la única variable que sepa dónde está la celda que contiene el 5. También tenga en cuenta que si establece $ a usando = &, debe usar = y la próxima vez (o unset ($ a)) para cambiar el enlace de referencia de $ a, específicamente $ a = NULL; no romperá el enlace, solo reemplaza el 5 con nulo; – Don

+7

@Don: Gracias por la elaboración. Puedo decirte que eres un programador de C – Asaph

+6

En segundo lugar lo que dice Don. Pero no diría que esto es demasiado simplista. Yo diría que esto está mal. – Artefacto

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

también tiene el efecto de crear $y['z'] si no existe, y se establece a null.

Esto evita mensajes de error que podría haber deseado leer. No he encontrado documentación sobre esto todavía; posiblemente nuevo en 5.3, por lo que sé.

Cuestiones relacionadas