2012-03-10 10 views
0

このようなことをすることはできますか?複数の定義またはconstをクラスメソッドのパラメータとして渡す

class Test 
{ 
    const FLAG1 = 'flag1.'; 
    const FLAG2 = 'flag2.'; 

    public function __construct() {} 

    public function myMethod($flags) 
    { 
     echo $flags 
    } 
} 

その後、

$test = new Test(); 
$test->myMethod(Test::FLAG1|Test::FLAG2); 

のようにそれを使用する私は、この例を使用しようとしましたが、私は私のechoとして2を取得します。 CONSTまたはDEFINEのいずれかをメソッドのパラメータとして使用する方法がわかりました。

私はこのテクニックを使用して、このスクリプトを発見し、私はそれが好奇心

http://www.pgregg.com/projects/php/preg_find/preg_find.php.txt

+0

ビット演算子 '|'を削除してただ1つのフラグを渡すと、それが動作します。 – JohnP

+0

ええ、私のことは、この男がどうやって彼の魔法をしたのか見たいと思っていたということでした:http://www.pgregg.com/projects/php/preg_find/preg_find.php.txt – Eli

+0

はい、彼はパラメータを渡していません。ビット操作を行う - http://php.net/manual/en/language.operators.bitwise.php – JohnP

答えて

2

はい、これはあなたが今持っているフラグ値では可能ですが、見つかりませんので、私は尋ねます。

ビット単位の演算子は...うまく動作します。私が1001 OR 0110をすると、私は1111になる。したがって、このような定数を使用できるようにするには、その値が2の累乗である必要があります。

const FLAG1 = '1'; 
const FLAG2 = '2'; 
const FLAG3 = '4'; 

その後、マスクにあなたの関数のパラメータ値を-ing ANDによってメソッドをテストすることができます。たとえば、誰かがFLAG1|FLAG2に合格した場合は、FLAG2に等しいフラグ2:0011 AND 0010 = 0010をテストできます。 http://php.net/manual/en/language.operators.bitwise.php

を私も、これは一般的に貧しいと考えられることを指摘すべきである:PHPでは、これはFLAG2は、あなたがここにビット演算子のすべてを見ることができます

に渡されたかどうかのブール値を取得する($flags & FLAG2) == FLAG2だろうPHPプログラミングのためのフォーム。複数のパラメータを渡す方がはるかに優れている場合は、なぜこれを行うのですか?個人的には、配列を受け入れるだけです。

これは意味がありますか?そうでない場合は、より詳細な質問をして、私はフォローアップします。

+0

私は通常、私のパラメータとして受け入れると配列を理解するが、私はユニークで無神論的に異なるものを作成しようとしていた。しかし、なぜ '($ flags&FLAG2)== FLAG2'をチェックする必要があるのか​​少し詳しく調べることができれば素晴らしいと思いますが、' FLAG2'だけをチェックすることはできませんか? – Eli

+0

@Eli、いいえ、「FLAG2」です。 'AND'''と' $ flags'を一緒に使うと、すべての '0'sに等しい値が得られます。そうでないと' FLAG2'に等しい値が得られません。再び、「1 AND 1 = 1」、および「0 AND 1 = 0」。基本的に 'AND'演算をフィルタとして使用して、あなたの関数に' $ flags'で渡された他のフラグをすべて除外します。 – Brad

関連する問題