ビット演算制御権限を使用してPHP

ビット演算子は、実用的なアプリケーションでは、ユーザアプリケーションの権限を行うことができます

私はそれがに来るときここにあった著作権管理方式のアプローチ広くビット&で、「ビットの実行シンボル」操作を使用するために主に使用され、オペレータ、|ビットまたは実行文字。それは10進数10を計算に関与している場合、それは計算に関与するバイナリ数に変換され、演算結果は、小数出力に変換されます。

このような特権値であり、

^ 0 = 1 2、相当数に2を "0001"(ここではI ^、 "パワー"、すなわち、と表記:2の0乗、以下同じ)であります

対応する番号に1 = 2 ^ 2、2は"0010"であり、
対応する番号に2 ^ 2 = 4、2は"0100"であり、
対応する番号に2 ^ 3 = 8、2は"1000"であります

数の範囲内の一定の数を決定するために使用することができ&演算子(上記の表から得られた値)

以下のような:7 = 4 | 2 | 1(あなたは、単に7 = 4 + 2 + 1として解釈することができます)

7&8が偽の場合で動作するように&7&4,7&2,7&1が真で知ることができ、かつ

&、|の使い方を見るためになじみのないマニュアルを見に行きます

 

例で見てみましょう:

$ perArr = 配列 '読み取り' => 1 << 0、// 2 ^ 0 
            '書き込み' => 1 << 1、// 2 ^ 1 
            'excute' => 1 << 2、// 2 ^ 2 
            '削除' => 1 << 3、// 2 ^ 3 
            '管理' => 1 << 4、// 2 ^ 4 
        )。
        $ strの = $ perArr [ '読みます'] | $ perArr [ '書き込み' ]; // 3 = 1 + 2
         // エコー$ strの| $ perArr [ 'excute'];ダイ; 
        $ manageMark = $ perArr [ '読みます'] | $ perArr [ '書き込み'] | $ perArr [ 'excute'] | $ perArr [」'を削除];
        $ adminMark = $ perArr[ '読む'] | $ perArr [ '書き込み'] | $ perArr [ 'excute'] | $ perArr [ '削除'] | $ perArr [ '管理'、];
         // 合計権威
        $マーク = 0 ;
         foreachの$ perArr  AS  の$ M ){
             $マーク = $マーク | $ M ; 
        } 
        エコー $マーク、31である// // 許可ビットに応じて現在の権限情報を取得
        $ ARR = [];
         foreachの$ perArr  AS  $キー => $マーク) {
            もし$ manageMark$マーク){
                 $ ARR [] = $キーを
            } 
        } 
     $ ARR =配列(
      '読み取り'、 '書き込み'、 'excute'、 '削除'
    )。

 

OK、アクセス許可は、そのようなアルゴリズムは、単純かつ効率的であると言うことができるしているスコア。私は問題、ライン上の例を覚えていないことを理解していない、我々は理解していないかわかりません。削除された実証上記の前提は、すなわちその1,2,4,8,16を販売権値を行うことです....(順序の問題は、このような例のように、より高度な権限必要な権限より高い値は、ここにありますパーミッション)。許可を使用すると、単にそれの価値に適切な権限を追加するためにどの権限理解したいどのような権限、および誰かに分布表を決定することができます。

この方法は、非常に使いやすい、欠点は、権利の分布は大丈夫だった場合、すべての権限がすべて加算されている場合は、その権利の価値は、ますます大きくなって、自分自身のために考えて、2乗の数倍になるということです。しかし、このための一般的な権威のために十分です。

 

参考リンクします。https://www.php.cn/php-weizijiaocheng-369689.html

 

おすすめ

転載: www.cnblogs.com/guliang/p/12525319.html