只是爲了說明不僅什麼&做但什麼該位與運營商在這種情況下,可能用於看一看
<?php
define('SOME_FLAG', 1);
define('SERVICES_JSON_LOOSE_TYPE', 2);
define('ANOTHER_FLAG', 4);
foo(0);
foo(7);
foo(SERVICES_JSON_LOOSE_TYPE|ANOTHER_FLAG);
function foo($value) {
echo "foo($value)\n";
bar($value, SOME_FLAG);
bar($value, SERVICES_JSON_LOOSE_TYPE);
bar($value, ANOTHER_FLAG);
if ($value & SOME_FLAG) {
echo " SOME_FLAG set\n";
}
else {
echo " SOME_FLAG NOT set\n";
}
if ($value & SERVICES_JSON_LOOSE_TYPE) {
echo " SERVICES_JSON_LOOSE_TYPE set\n";
}
else {
echo " SERVICES_JSON_LOOSE_TYPE NOT set\n";
}
if ($value & ANOTHER_FLAG) {
echo " ANOTHER_FLAG set\n";
}
else {
echo " ANOTHER_FLAG NOT set\n";
}
echo "\n";
}
function bar($value, $flag) {
printf(" value| %08s (%d)\n", decbin($value), $value);
printf(" flag |& %08s (%d)\n", decbin($flag), $flag);
printf(" and |= %08s (%d)\n", decbin($value & $flag), $value & $flag);
echo "\n";
}
輸出
foo(0)
value| 00000000 (0)
flag |& 00000001 (1)
and |= 00000000 (0)
value| 00000000 (0)
flag |& 00000010 (2)
and |= 00000000 (0)
value| 00000000 (0)
flag |& 00000100 (4)
and |= 00000000 (0)
SOME_FLAG NOT set
SERVICES_JSON_LOOSE_TYPE NOT set
ANOTHER_FLAG NOT set
foo(7)
value| 00000111 (7)
flag |& 00000001 (1)
and |= 00000001 (1)
value| 00000111 (7)
flag |& 00000010 (2)
and |= 00000010 (2)
value| 00000111 (7)
flag |& 00000100 (4)
and |= 00000100 (4)
SOME_FLAG set
SERVICES_JSON_LOOSE_TYPE set
ANOTHER_FLAG set
foo(6)
value| 00000110 (6)
flag |& 00000001 (1)
and |= 00000000 (0)
value| 00000110 (6)
flag |& 00000010 (2)
and |= 00000010 (2)
value| 00000110 (6)
flag |& 00000100 (4)
and |= 00000100 (4)
SOME_FLAG NOT set
SERVICES_JSON_LOOSE_TYPE set
ANOTHER_FLAG set
這是如果某一標誌在值設置爲測試方式。
查看php文檔,例如的preg_match_all文檔:
flags
Can be a combination of the following flags [...]
PREG_PATTERN_ORDER [...]
PREG_SET_ORDER [...]
PREG_OFFSET_CAPTURE [...]
你會發現這個東西Can be a combination of the following flags...
文檔中多次。這些函數/方法背後的代碼完全是使用按位運算符進行檢查的。
RTM - http://php.net/manual/en/language.operators.bitwise.php – j08691 2013-03-05 15:50:05
它是一個按位運算符,不是邏輯運算符。它以二進制級別操作數據,這爲您提供了很多功能,但請不要將它與邏輯AND運算符'&&'混淆。 – Andrew 2013-03-05 15:52:18