2012-03-23 6 views
2

おはようございます。PHPの関数のバイナリフラグ

私は、引数の数を増やすことなく、関数に複数のフラグを使用する方法を理解しようとしています。

たとえば、some_func(flag1 | flag2 | flag3)のように使用します。

は、今の私は

define('flag1', 1); 
define('flag2', 2); 
define('flag3', 4); 

function flagtest($flags) 
{ 
if ($flags & flag1) 
    echo 'flag1 is on, '; 
if ($flags & flag2) 
    echo 'flag2 is on, '; 
if ($flags & flag3) 
    echo 'flag3 is on, '; 
} 
flagtest(flag2 | flag3); 

ようにそれを行なったし、それはフラグ2と3がオンになっていることをprings。

したがって、すべてが機能しています。しかし...私はそれを行うより良い方法があると確信しています...そうですか? 質問には、どうすればいいですか?私はそれのようなものを実装する適切な方法があると確信しています。

+0

[複数の定義やconstをクラスメソッドのパラメータとして渡す]の複製が可能です(http://stackoverflow.com/questions/9644085/pass-multiple-defines-or-const-as-a-parameter-to -a-class-method) – Brad

+0

@Brad、そうではありません:) – NewProger

+0

Check http://www.shawnolson.net/a/601/setting_bits_and_flags_in_php.html –

答えて

2

はどうやらそれが行われるべき方法です。希望の結果が記述されている場合は、他の方法で行う必要はありません。

1

あなたはそうのように、あなたの$flags引数に配列を使用する場合があります

function flagtest($flags = false) 
{ 
    if (is_array($flags) 
    { 
     foreach ($flags as $index => $value) 
     { 
      if ($value == true) echo "flag $index is on\n"; 
     } 
    } 
} 

$my_flags = array(true, true, false); 
flagtest($my_flags); // -> flag1 is on, flag2 is on, 
+0

これは配列で行うことができますが、いくつかの理由でそれらを使用したくありません。 – NewProger