Operador de asignación de referencia en PHP, = &

Respuestas:

121

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

Se llama asignación por referencia , lo que, para citar el manual, "significa que ambas variables terminan apuntando a los mismos datos y no se copia nada en ninguna parte" .

Lo único que está desaprobado =&es "asignar el resultado de newpor referencia" en PHP 5 , lo que podría ser la fuente de cualquier confusión. newse asigna automáticamente por referencia, por lo que &es redundante / obsoleto en $o = &new C;, pero no en $o = &$c;.


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

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

Aquí hay un enlace útil a una sección detallada sobre Asignar por referencia en el manual de PHP . Esa página es parte de una serie de referencias; vale la pena tomarse un minuto para leer la serie completa.

user56reinstatemonica8
fuente
8
nota al margen re: "ya que es difícil de buscar" : symbolhound.com es tu amigo para cosas como esta.
billynoah
1
@billynoah ¡Vaya! symbolhound ahora se agrega permanentemente a mi caja de herramientas.
Parapluie
26

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

Asaf
fuente
60
Lo siento, pero esto es demasiado simplista. $ a = & $ b significa hacer que la variable $ a se refiera a lo mismo que hace $ b en este momento. Después de esto, $ a = 5; también dará como resultado que $ b tenga un 5. Sin embargo, el enlace de referencia puede romperse por $ b = & $ xyz; o desarmado ($ b); En ese momento, $ a será la única variable que sabe dónde está la celda que contiene el 5. También tenga en cuenta que si configura $ a usando = &, debe usar = & la próxima vez (o desarmar ($ a)) para cambiar el enlace de referencia de $ a, específicamente $ a = NULL; no romperá el enlace, solo reemplaza el 5 con nulo;
Don
8
@Don: Gracias por la elaboración. Puedo decir que eres un programador en C.
Asaph
8
Secundo lo que dice Don. Pero no diría que esto es demasiado simplista. Yo diría que esto está mal.
Artefacto
@Don, realmente deberías publicar tu comentario como respuesta.
Adam
6
$x = &$y['z'];

también tiene el efecto de crear $y['z']si no existe y establecerlo en null.

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

malcanso
fuente