位運算子在實際應用中可以做使用者許可權的應用
我這裡說到的許可權管理辦法是乙個普遍採用的方法,主要是使用到」位執行符」操作,& 位與運算子、| 位或執行符。參與運算的如果是10進製數,則會被轉換至2進製數參與運算,然後計算結果會再轉換為10進製數輸出。
它的許可權值是這樣的
2^0=1,相應2進數為」0001″(在這裡^我表示成」次方」,即:2的0次方,下同)
2^1=2,相應2進數為」0010″
2^2=4,相應2進數為」0100″
2^3=8,相應2進數為」1000″
要判斷乙個數在某些數範圍內就可以使用 & 運算子(數值從上面的表中得來)
如:7=4|2|1 (你也可以簡單理解成7=4+2+1)
用 & 來操作,可以知道7&4、7&2、7&1都是真的,而如果7&8則是假的
&、| 不熟悉的就要去查查手冊,看看是怎麼用的了
下面來看例子吧:
$perarr = array( 'read' => 1<<0,//2^0
'write' => 1<<1,//2^1
'excute' => 1<<2,//2^2
'delete' => 1<<3,//2^3
'manage' => 1<<4,//2^4);
$str = $perarr['read'] | $perarr['write'];// 3 = 1 + 2
//echo $str | $perarr['excute'];die;
$managemark = $perarr['read'] | $perarr['write'] | $perarr['excute'] | $perarr['delete'];
$adminmark = $perarr['read'] | $perarr['write'] | $perarr['excute'] | $perarr['delete'] | $perarr['manage'];
//總許可權
$mark = 0;
foreach ($perarr
as$m
)
echo
$mark;//31//
根據許可權位 獲取當前許可權資訊
$arr =;
foreach ($perarr
as$key=>$mark
) }
$arr = array(
'read','write','excute','delete'
);
ok,許可權分值的這其中乙個演算法就是這樣的,可以說是簡單高效。也不知大家明白沒有,不明白也沒關係,記住例子就行了。前提就是做好許可權值的分布,即那個1、2、4、8、16….(這裡還有個順序問題,越高階的許可權就要越高的許可權值,比如上面的例子所演示的刪除許可權)。有了許可權分布表就可以確定給某個人什麼許可權了,你簡單的理解成要哪個許可權就加上相應的許可權值吧。
這個方法很好用的,缺點就是如果許可權分布得細的話,那麼許可權值會越來越大,你自己想想,2的幾次方、如果所有的許可權都要則是全部相加。不過對於一般的許可權來說這個已經足夠了。
PHP 位運算子
位運算子允許對整型數中指定的位進行置位。如果左右引數都是字串,則位運算子將操作字元的 ascii 值。echo 12 9 輸出退格字元 ascii 8 1 ascii 49 9 ascii 57 8 echo hallo hello 輸出 ascii 值 0 4 0 0 0 a e 4 echo 2...
PHP基礎 運算子 算術運算子 位運算子
1 將強制轉換為數字作加法運算 例 a 33 b 45.0 echo a b a b gettype a b 2 將強制轉換為數字作減法運算 例 a 33 b 45 echo a b a b gettype a b a 33.70 b 45.00 echo a b a b gettype a b 3...
位運算子,「,」逗號運算子,
位運算子有 按位與 按位或 按位異或 按位取反 優先順序從高到低,依次為 按位與運算有兩種典型用法,一是取乙個位串資訊的某幾位,如以下 擷取x的最低7位 x 0177。二是讓某變數保留某幾位,其餘位置0,如以下 讓x只保留最低6位 x x 077。按位或運算的典型用法是將乙個位串資訊的某幾位置為1。...