2010-12-06 15 views
1

Iv'eは、クラス構造内の変数に動的な値を設定できないことに常に気付いていましたが、これを回避する方法はありますか?クラス内の変数/定数による動的値の割り当て

私はこのインタフェースを有する:このコード内

interface IUserPermissions 
{ 
    /* 
     * Public VIEW,CREATE,UPDATE,DELETE 
    */ 
    const PUBLIC_VIEW = 1; 
    const PUBLIC_CREATE = 2; 
    const PUBLIC_EDIT = 4; 
    const PUBLIC_DELETE = 8; 
    const PUBLIC_GLOBAL = 1 | 2 | 4 | 8;   #Section 1 

    /* 
     * Admin VIEW,CREATE,UPDATE,DELETE 
    */ 
    const ADMIN_VIEW = 16; 
    const ADMIN_CREATE = 32; 
    const ADMIN_EDIT = 64; 
    const ADMIN_DELETE = 128; 
    const ADMIN_GLOBAL = 16 | 32 | 64 | 128;  #Section 2 
} 

線が第1 & 2トリガ誤差、より具体的なエラーは以下のようにマークされた:

syntax error, unexpected '|', expecting ',' or ';' 

しかし、これはあるとしてインターフェイスにはコードブロックが許可されていないメソッドはありません。

誰でもソリューションを提供できますか?

答えて

2

これらの演算子をクラスメンバー宣言で使用することはできません。しかし、あなたは単に数学を自分で実行し、結果を割り当てることができます。 1 | 2 | 4 | 816 | 32 | 64 | 12815240に評価しているので、それぞれ、単に実行します。コンパイラは、唯一の定数リテラルが含まれている数式を認識しますので、他の言語で

const PUBLIC_GLOBAL = 15; // 1 | 2 | 4 | 8 

const ADMIN_GLOBAL = 240; // 16 | 32 | 64 | 128 
+0

申し訳ありませんが、私のコードは「11100110」と評価されるXORとなっていました。 – RobertPitt

+0

はい。私もそれを実現しました。いずれにしても、自分で値を計算してコメントにしてください。 – webbiedave

+0

@RobertPitt - XORではなくORを意味すると思う。しかしいずれにしても、答えは同じです: '11110000'(240 dec)。 PHPのXOR演算子は '^'ですが、OR演算子は '|'です。 – Lee

2

が、これは動作します、それらを単一の定数リテラル値に「減らし」ます。したがって、実際のコードが存在しないコンテキストでは、ほとんどの「単純な」数式が許可されます。

しかし、phpではコンパイラはありません(少なくとも従来の意味ではない)。 PHPが解釈されます。だから、私たちが他の言語で使っていた多くの "コンパイル時"の機能は、単にPHPには存在しません。

これはその場合の1つです。あなたが(代わりに、インターフェイスの)クラスにあなたの定数を移動し、(代わりに定数の)それらの静的メンバ変数にしたい場合を除き、あなたが数学を自分でやって立ち往生している:

(16 & 32 & 64 & 128) == 0 

しかし、私は実際にあなたを疑います意味:

(16 | 32 | 64 | 128) == 240 
+0

私の質問は変更されました。ありがとうございました。最も論理的です – RobertPitt

関連する問題