2010-07-05 13 views
19

Die Antwort darauf ist viel schwieriger, als ich gedacht hätte. Da ich keine Ahnung habe, wie Sie das nennen würden, ist es schwierig, eine Google-Suche durchzuführen, da diese Zeichen ignoriert werden.Was tun die Operatoren '& =' und '= &'?

Ich habe versucht, die PHP Assignment Operators Seite und sogar die anderen Betreiber Seiten und fand nichts, was mir genau gesagt, was sie tun. Ich möchte nicht nur aufgrund der einzelnen Funktion, die es benutzt, raten. Was also tun die '& =' und '= &' Operatoren?

Alles, was ich weiß, ist, dass es eine Variable setzt, das wäre der '=' Teil, also muss ich wirklich wissen, was der '&' Teil tut.

Bitte sagen Sie nicht das Offensichtliche; Ich brauche jemanden, der genau erklärt, was sie tun. Ich weiß, einer von ihnen ist "bitweise", aber das bedeutet mir nichts.

+0

Sie sind völlig verschiedene Operatoren wie die Antworten reflektieren. –

+0

Ich hatte das gleiche Problem, als ich versuchte, selbst nachzusehen. Die Dokumentation könnte besser organisiert sein, aber Sie müssen sich im Grunde die Seite _Bitwise Operator_ und die _Where Referenzen Do_ Seite ansehen. Außerdem denke ich, dass das Zuordnen per Referenz normalerweise '$ a = & $ b' geschrieben wird, aber ich denke, dass der Abstand zwischen' '' '' '' '' 'optional ist. http://www.php.net/manual/en/language.references.whatdo.php –

+2

Ich bevorzuge mit '$ a = & $ b'. Es ist viel klarer, denn das '&' gehört nicht zum Gleichheitszeichen, sondern zur Variablen. Es ist ähnlich wie der Operator "a -> 0" "goes to", was in der Realität "a--> 0" ist. http://StackOverflow.com/Q/1642028/985454 So viel zur Verwirrung. – Qwerty

Antwort

35

=&assigns by reference

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

Von PHP Manual auf Referenzen:

Referenzen in PHP ist ein Mittel, um die gleichen variable Inhalte mit verschiedenen Namen zuzugreifen.


&= ist eine bitwise AND Zuordnung

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

Von Wikipedia on Bitwise AND:

Eine bitweise UND nimmt zwei binären Repräsentationen von gleicher Länge und führt die logische UND-Operation an jedem Paar entsprechender Bits. In jedem Paar ist das Ergebnis 1, wenn das erste Bit 1 und das zweite Bit ist 1. Ansonsten ist, ist das Ergebnis 0. Zum Beispiel:

0101 
AND 0011 
    = 0001 

EDIT: Für eine praktische Beispiel zu bitweisen Operationen, siehe meine Antwort auf Bitwise Operations in PHP

+2

Ich bevorzuge '$ a = & $ b'. Es ist viel klarer, denn das '&' gehört nicht zum Gleichheitszeichen, sondern zur Variablen. Es ist ähnlich wie der Operator "a -> 0" "goes to", was in der Realität "a--> 0" ist. http://stackoverflow.com/q/1642028/985454 – Qwerty

10

=& ist assigning by reference.

Es weist eine Variable nicht nach Wert, sondern durch Referenz zu.

Beispiel:

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

$b = 'bar'; 

echo $a; 

druckt bar weil $b ein Verweis auf $a und daher $b ändert sich auch der Wert der $a ändern.


&= ist bitwise AND.

Beispiel:

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

Dann $a &= $b ist nur kurz für $a = $a & $b und bedeutet: jedes Stück nehmen und die AND operation ausführen, das heißt:

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

Deshalb

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

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

Ihr UND ist ein OR – Gordon

+2

@Gordon: Ups, behoben, wusste ich etwas fühlte sich falsch ... Ich brauche immer noch meinen Kaffee: D ... danke :) –

+0

Gern geschehen. Ich bin um 6 Uhr aus dem Bett gefallen, also bin ich schon zwei Tassen Kaffee :) – Gordon

2
&= 

ist der bitweise UND-Zuweisungsoperator. Es führt ein "AND" für die Variable aus und speichert das Ergebnis. (Weitere Informationen sind in Bitwise Operators und allgemeinere Informationen sind in Bitwise Operations in C).

Die

=& 

Operator ist eine Zuordnung durch Bezugnahme, die die variable Punkt nicht auf den Wert der anderen Variablen oder Konstanten, sondern an dieser Speicherstelle (Weitere Informationen sind in What References Are) macht .

1

'& =' und '= &' sind sehr unterschiedliche Betreiber.

'& =' ist eine bitweise Zuweisungsoperator:

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

'= &' liefert eine Referenz:

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