PHP函数标志,如何使用?

PHP函数标志,如何使用?,php,function,bit-manipulation,flags,Php,Function,Bit Manipulation,Flags,我试图创建一个以标志作为参数的函数,但输出总是与预期的不同: 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"; } te

我试图创建一个以标志作为参数的函数,但输出总是与预期的不同:

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

对常量值使用十六进制表示法对程序的行为没有影响,但这是一种惯用的方式,向程序员强调这些值构成了一个函数。另一种方法是使用移位:
1Dude,您的评论的输出预期不正确。因为输出总是以其他方式-BC而不是ABC,这是程序的正确行为。