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

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

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

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

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

Ответ 1

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

$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

Ответ 2

=& назначение по ссылке.

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

Пример:

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

$b = 'bar';

echo $a;

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


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

Пример:

$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 ;)

Ответ 3

&=

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

=&
Оператор

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

Ответ 4

'& =' и '= &' являются очень разными операторами.

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

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