&
- побитовый оператор. Он объединяет два значения поразрядно.
Что такое побитовый оператор?
Каждое целое число внутренне представлено в виде количества битов.
1 is 0001
2 is 0010
4 is 0100
8 is 1000
И так далее. значение каждого бита в два раза больше предшествующего ему.
Вы можете получить другие числа, комбинируя биты
3 is 0011 (2+1)
5 is 0101 (4+1)
Побитовая операция работает с каждым битом в обеих переменных. &
устанавливает каждый бит в результате равным 1, если он равен 1 в обоих значениях , с которыми он работает.
9 & 5 == 1
потому что
9 == 1001
5 == 0101
----------
1 == 0001
| объединит все 1с:
3 | 5 == 7
3 == 0011
5 == 0101
---------
7 == 0111
Как можно это использовать?
Пример:
define('LOG_WARNING',1);
define('LOG_IO',2);
define('LOG_ALIENATTACKS,4);
$myLogLevel = LOG_WARNING | LOG_ALIENATACKS;
Теперь $myLogLevel
- это комбинация LOG_WARNING
и LOG_ALIENATTACK
. Вы можете проверить это с помощью оператора &
:
if($myLogLevel&LOG_WARNING).... //true
if($myLogLevel&LOG_IO).... //false
if($myLogLevel&LOG_ALIENATTACKS)..../ /true run or your live!!!
Если вы хотите узнать больше о теме, ищите битовые флаги и двоичные операции.