0

我正在寻找一种方法来从按位运算符可能预先计算的整数中找出函数中传递的参数(以及它们的顺序) 。我已经知道我应该使用像 2^n 这样的数字作为可以传递的常量(由于按位计算),但我不知道如何分解它。

所以总结一下:

  1. 如何确定 1 和 4 已传递给以下函数
  2. 可以通过某种特定的按位运算符以某种方式获得这些顺序吗?

这是一个显示我的意思的示例。

$inst = new SomeClass;
$inst->some_func( SomeClass::RULE1 | SomeClass::RULE3 );

class SomeClass {

    const RULE1 = 1;
    const RULE2 = 2;
    const RULE3 = 4;

    public function some_func($arg) {
        // what are the RULE's in the $arg here?
    }

请注意,我试图弄清楚如何将按位运算符用作函数参数。所以我不是在寻找其他解决方案,比如将数组传递给函数或使用func_get_args().

4

1 回答 1

1

那么让我们看一下(语法适用于 PHP 5.4):

const RULE1 = 0b0000 0001; // 1
const RULE2 = 0b0000 0010; // 2
const RULE3 = 0b0000 0100; // 4

所以当你通过时$inst->some_func( SomeClass::RULE1 | SomeClass::RULE3 );

arg 将是0b0000 0101.

所以现在要实际使用它,我们会这样做:

if ($arg & self::RULE1) // check if the RULE1 bit is ON (ie: equals 1)
{
    // do stuff based on RULE1;
}

if ($arg & self::RULE2) // check if the RULE2 bit is ON
{
    // do stuff based on RULE2;
}

// etc

希望这会有所帮助!


可以通过某种特定的按位运算符以某种方式获得这些顺序吗?

那是不可能的,因为RULE1 | RULE3两者RULE3 | RULE1都产生完全相同的二进制序列。

于 2013-02-06T00:26:24.067 回答