Ответ 1
Флаги должны иметь степень 2 для поразрядного или совместно правильно.
define("FLAG_A", 0x1);
define("FLAG_B", 0x2);
define("FLAG_C", 0x4);
function test_flags($flags) {
if ($flags & FLAG_A) echo "A";
if ($flags & FLAG_B) echo "B";
if ($flags & FLAG_C) echo "C";
}
test_flags(FLAG_B | FLAG_C); # Now the output will be BC
Использование шестнадцатеричной нотации для константных значений не имеет никакого отношения к поведению программы, но является одним идиоматическим способом подчеркнуть для программистов, что значения составляют бит поле. Другим было бы использование сдвигов: 1<<0
, 1<<1
, 1<<2
, & c.