我正在寻找一种方法来通过按位运算符从可能预先计算的整数中的函数中找出传递的参数(以及它们的顺序)。我已经知道我应该使用像2 ^ n这样的数字来表示可以传递的常数(由于按位计算),但我不知道如何分解它。
总结一下:
这是一个显示我的意思的例子。
$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()
。
答案 0 :(得分: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
都产生完全相同的二进制序列。