PHP函数标志怎么样?

我试图创建一个具有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";   
}  
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

对于常数值使用十六进制符号对程序的行为没有任何影响,但是一个惯用的方式是向程序员强调值组成一个bit field.另一个是使用位移:1 <<1,< 1,1< 2& c.

http://stackoverflow.com/questions/3589573/php-function-flags-how

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:PHP函数标志怎么样?