Флаги должны быть степенями 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 и т. д.