2010-07-05 3 views
19

Нахождение ответа на этот вопрос оказалось намного сложнее, чем я думал. Поскольку я не знаю, как вы это называете, трудно запустить поиск Google, так как он будет игнорировать эти символы.Что делают операторы '& =' и '= &'?

Я пробовал просматривать страницу PHP Assignment Operators и даже на других страницах операторов, и не нашел ничего, что говорило мне, что именно они делают. Я не просто хочу угадать, основываясь на единственной функции, которая у меня есть, которая ее использует. Так что же делать операторы '& =' и '= &'?

Все, что я знаю, это набор переменных, который будет частью '=', поэтому мне действительно нужно знать, что делает «&».

Пожалуйста, не говорите очевидного; Мне нужно, чтобы кто-то точно объяснил, что они делают. Я знаю, что один из них «поразведен», но это ничего не значит для меня.

+0

Они совершенно разные операторы, как ответы отражают. –

+0

У меня была такая же проблема, как и сама. Документация может быть лучше организована, но вам в основном нужно посмотреть страницу _Bitwise Operator_ и страницу _What References Do_. Кроме того, я думаю, что назначение по ссылке обычно записывается '$ a = & $ b', но я думаю, что пространство между' = 'и' & 'является необязательным. http://www.php.net/manual/en/language.references.whatdo.php –

+2

Я предпочитаю использовать '$ a = & $ b'. Это намного яснее, потому что '&' не принадлежит знаку равенства, а фактически действительна. Он похож на 'a -> 0'" переходит в оператор, который на самом деле является 'a--> 0'. http://stackoverflow.com/q/1642028/985454 Так много до путаницы. – Qwerty

ответ

35

=&assigns by reference

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

От PHP Manual на Ссылках:

Ссылки в PHP является средством для доступа к одному переменному контенту разных имен.


&= является bitwise AND назначением

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

От Wikipedia on Bitwise AND:

побитового И принимает два двоичных представлений одинаковой длины и выполняет логическую операцию И на каждую пару соответствующего биты. В каждой паре, результат равен 1, если первый бит равен 1, а второй бит равен 1. В противном случае результат равен 0. Например:

0101 
AND 0011 
    = 0001 

EDIT: для практического пример по побитовым операциям, см. мой ответ на Bitwise Operations in PHP

+2

Я предпочитаю использовать '$ a = & $ b'. Это намного яснее, потому что '&' не принадлежит знаку равенства, а фактически действительна. Он похож на 'a -> 0'" переходит в оператор, который на самом деле является 'a--> 0'. http://stackoverflow.com/q/1642028/985454 – Qwerty

10

=& является assigning by reference.

Он присваивает переменную не по значению, а по ссылке.

Пример:

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

$b = 'bar'; 

echo $a; 

печатает bar, потому что $b имеет ссылку на $a и, следовательно, изменение $b также изменяет значение $a.


&= является bitwise AND.

Пример:

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

Тогда $a &= $b просто коротким для $a = $a & $b и средства: Примите каждый бит и выполнять AND operation, то есть:

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

Поэтому

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

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

Your AND is OR – Gordon

+2

@ Gordon: Uups, исправлено, я знал, что что-то не так ... Мне все еще нужен мой кофе: D ... спасибо :) –

+0

приветствую вас. Я упал с постели в 6, так что я уже две чашки кофе впереди :) – Gordon

2
&= 

- побитовый оператор присваивания «И». Он выполняет «И» в переменной и сохраняет результат. (дополнительная информация находится в Bitwise Operators и более общая информация находится в Bitwise Operations in C).

=& 

оператор является назначение в качестве ссылки, что делает переменную точку не к значению другой переменной или константы, а скорее эту ячейку памяти (более подробная информация находится в What References Are) ,

1

'& =' и '= &' - очень разные операторы.

'& =' является оператор присваивания поразрядного:

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

'= &' возвращает ссылку:

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