如何测试 PHP 按位函数输入参数

Vol*_*ike 3 php bit-manipulation bitwise-operators input-parameters bitwise-or

有时在编程中,它们允许将参数链接到单个函数输入变量中,例如下面的第二个输入变量:

define('FLAGA',40);
define('FLAGB',10);
define('FLAGC',3);
function foo($sFile, $vFlags) {
  // do something
}
foo('test.txt',FLAGA | FLAGB | FLAGC);
Run Code Online (Sandbox Code Playgroud)

PHP 将此单个管道字符(|)称为按位OR运算符。我现在如何在里面添加一些东西foo()来测试$vFlags以查看设置了哪些标志?

squ*_*age 5

我想你会发现像这样的标志通常被定义为 2 的幂,例如:

define('FLAGA',1);
define('FLAGB',2);
define('FLAGC',4); /* then 8, 16, 32, etc... */
Run Code Online (Sandbox Code Playgroud)

正如你所说的,这些可以通过使用按位或运算符来组合:

foo('test.txt',FLAGA | FLAGB | FLAGC);
Run Code Online (Sandbox Code Playgroud)

要在您的函数中测试这些标志,您需要使用按位 AND 运算符,如下所示:

function foo($sFile, $vFlags) {
  if ($vFlags & FLAGA) {
    // FLAGA was set
  }
  if ($vFlags & FLAGB) {
    // FLAGB was set
  }
  //// etc...
}
Run Code Online (Sandbox Code Playgroud)