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