Что делают операторы '& =' и '= &'? - PullRequest
20 голосов
/ 05 июля 2010

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

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

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

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

Ответы [ 4 ]

36 голосов
/ 05 июля 2010

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

$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

РЕДАКТИРОВАТЬ: Практический пример побитовых операций, см. Мой ответ на Побитовые операции в PHP

10 голосов
/ 05 июля 2010

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

Назначение переменной не по значению, а по ссылке.

Пример:

$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 ;)
2 голосов
/ 05 июля 2010
&=

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

=&

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

1 голос
/ 05 июля 2010

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

'& =' является побитовым оператором присваивания:

$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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...