PHP 使用位運算子控制許可權

2022-03-18 16:24:54 字數 1581 閱讀 8853

位運算子在實際應用中可以做使用者許可權的應用

我這裡說到的許可權管理辦法是乙個普遍採用的方法,主要是使用到」位執行符」操作,& 位與運算子、| 位或執行符。參與運算的如果是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。...