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 );;

引数は になります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 に答える