2010-07-05 26 views
19

Encontrar la respuesta a esto está resultando ser mucho más difícil de lo que hubiera pensado. Como no tengo ni idea de cómo llamarías esto, es difícil ejecutar una búsqueda en Google, ya que ignorará esos caracteres.¿Qué hacen los operadores '& =' y '= &'?

Intenté buscar en la página PHP Assignment Operators, e incluso en las demás páginas de los operadores, y no encontré nada que me dijera exactamente qué es lo que hacen. No solo quiero adivinar en función de la única función que tengo que lo use. Entonces, ¿qué hacen exactamente los operadores '& =' y '= &'?

Todo lo que sé es que establece una variable, que sería la parte '=', así que realmente necesito saber qué está haciendo la parte '&'.

Por favor, no diga lo obvio; Necesito que alguien explique exactamente lo que hacen. Sé que uno de ellos es "bit a bit", pero eso no significa nada para mí.

+0

Son completamente diferentes operadores como las respuestas reflejan. –

+0

Tuve el mismo problema al intentar buscarlo yo mismo. La documentación podría estar mejor organizada, pero básicamente debe buscar en la página _Bitwise Operator_ y en la página _What References Do_. Además, creo que la asignación por referencia generalmente se escribe '$ a = & $ b', pero supongo que el espacio entre' '' 'y' & 'es opcional. http://www.php.net/manual/en/language.references.whatdo.php –

+2

Prefiero usar '$ a = & $ b'. Es mucho más claro, porque el 'y' no pertenece al signo igual, sino a la variable en realidad. Es similar al operador 'a -> 0'" va a ", que en realidad es' a--> 0'. http://stackoverflow.com/q/1642028/985454 Tanto para la confusión. – Qwerty

Respuesta

35

=&assigns by reference

$a = 1; 
$b =& $a; 
$a++; 
echo $b; // 2 

De Manual PHP en Referencias:

Referencias en PHP son un medio para acceder al mismo contenido variable pero con diferentes nombres.


&= es una bitwise AND asignación

$a = 1; 
$a &= 1; // is the same as 
$a = $a & 1; 
echo $a; // 1 

De Wikipedia on Bitwise AND:

Un bit a bit y toma dos representaciones binarias de igual longitud y realiza la operación lógica AND en cada par de correspondientes bits. En cada par, el resultado es 1 si el primer bit es 1 y el segundo bit es 1. De lo contrario, el resultado es 0. Por ejemplo:

0101 
AND 0011 
    = 0001 

EDIT: Para una práctica ejemplo en operaciones bit a bit, vea mi respuesta a Bitwise Operations in PHP

+2

Prefiero usar '$ a = & $ b'. Es mucho más claro, porque el 'y' no pertenece al signo igual, sino a la variable en realidad. Es similar al operador 'a -> 0'" va a ", que en realidad es' a--> 0'. http://stackoverflow.com/q/1642028/985454 – Qwerty

10

=& es assigning by reference.

Asigna una variable no por valor sino por referencia.

Ejemplo:

$a = 'foo'; 
$b =& $a; 

$b = 'bar'; 

echo $a; 

grabados bar porque $b tiene una referencia a $a y por lo tanto el cambio de $b también cambia el valor de $a.


&= es bitwise AND.

Ejemplo:

$a = 4 // binary representation: 100 
$b = 1 // binary representation: 001 

Entonces $a &= $b es sólo la abreviatura de $a = $a & $b y significa: Tomar cada bit y realizar la AND operation, es decir:

0 & 1 = 0 
1 & 0 = 0 
1 & 1 = 1 
0 & 0 = 0 

Por lo tanto

 1 0 0 
AND 0 0 1 
    ----- 
    0 0 0 

=> $a = 0 // bit representation 0 ;) 
+1

Tu Y es un O – Gordon

+2

@Gordon: Uups, corregido, sabía que algo estaba mal ... Todavía necesito mi café: D ... gracias :) –

+0

de nada. Me caí de la cama a las 6 así que ya tengo dos tazas de café :) – Gordon

2
&= 

es el operador de asignación de bits "Y". Realiza un "Y" en la variable y almacena el resultado. (más información está en Bitwise Operators y más información general está en Bitwise Operations in C).

El operador

=& 

es una asignación por referencia, que hace que el punto variable no al valor de la otra variable o constante, sino más bien a esa ubicación de memoria (más información es en What References Are) .

1

'& =' y '= &' son operadores muy diferentes.

'& =' es un operador de asignación bit a bit:

$var = false; 
$var &= foo(); // will call foo() 
$var = false & foo(); // will call foo() 
$var = $var && foo(); // will not call foo() 

'= &' devuelve una referencia:

$a = $b; //$a points to $b 
$a =& $b; //$a does NOT point to $b... both point to the same thing. 
Cuestiones relacionadas