Что делают операторы '& =' и '= &'?

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

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

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

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

=& присваивает по ссылке

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

Из руководства PHP по ссылкам:

Ссылки на PHP – это средство доступа к одному и тому же содержимому переменной разными именами.


&= – побитовое назначение И

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

Материал из Википедии:

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

  0101 AND 0011 = 0001 

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

=& присваивается по ссылке .

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

Пример:

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

prints bar потому что $b имеет ссылку на $a и поэтому изменение $b также изменяет значение $a .


&= побитовое И.

Пример:

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

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

 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 ;) 
 &= 

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

 =& 

оператор является присваиванием по ссылке, что делает переменную точкой не для значения другой переменной или константы, а скорее для этой ячейки памяти (дополнительная информация приведена в « Какие ссылки» ).

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

'& =' – оператор побитового присваивания:

 $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.