Флаги функций PHP, как?

Я пытаюсь создать функцию с флагами в качестве аргументов, но вывод всегда отличается от ожидаемого:

define("FLAG_A", 1); define("FLAG_B", 4); define("FLAG_C", 7); 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); # Output is always ABC, not BC 

Как я могу исправить эту проблему?

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