權限管理辦法是一個普遍採用的方法,主要是使用到」位元運行符」操作,& 位元與運算子、| 位元或運行符。參與運算的如果是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則是假的
&、| 不熟悉的就要去查查手冊,看看是怎麼用的了
實例說明:
<?php // 赋予权限值-->删除:8、上传:4、写入:2、只读:1 define(“mDELETE”,8); define(“mUPLOAD”,4); define(“mWRITE”,2); define(“mREAD”,1); //vvvvvvvvvvvvv使用说明vvvvvvvvvvvvv //部门经理的权限为(假设它拥有此部门的所有权限),| 是位或运行符,不熟悉的就查查资料 echo mDELETE|mUPLOAD|mWRITE|mREAD ,” “;// 相当于是把上面的权限值加起来:8+4+2+1=15 // 设我只有 upload 和 read 权限,则 echo mUPLOAD|mREAD ,” “;//相当于是把上传、只读的权限值分别相加:4+1=5 /* *赋予它多个权限就分别取得权限值相加,又比如某位员工拥有除了删除外的权限其余都拥有,那它的权限值是多少? *应该是:4+2+1=7 *明白了怎么赋值给权限吧? */ //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //判断某人的权限可用,设权限值在$key中 /* *判断权限用&位与符, */ $key = 13;//13=8+4+1 if($key & mDELETE) echo “有删除权限 “; //8 if($key & mUPLOAD) echo “有上传权限 “; //4 $a=$key & mWRITE; echo “有写权限 “.$a; //无此权限 if($key & mREAD) echo “有读权限 “; //1 ?>
OK,權限分值的這其中一個演算法就是這樣的,可以說是簡單又有效率。也不知大家明白沒有,不懂也沒關係,記得例子就行了。前提就是做好權限值的分佈,也就是那個1、2、4、8、16….(這裡還有個順序問題,越高級的權限就要越高的權限值,例如上面的例子所示範的刪除權限)。有了權限分佈表就可以確定要給某個人甚麼權限了,你簡單的理解成要哪個權限就加上對應的權限值吧。
這個方法很好用的,缺點就是如果權限分佈得細的話,那麼權限值會越來越大,你自己想想,2的幾次方、如果所有的權限都要則是全部相加。不過對於一般的權限來說這個已經足夠了。
位元運算技巧
1.取得INT型最大值和最小值
最大值:
~ (1 << 31)
最小值:
(1 << 31)
2.乘以2運算與除以2運算
乘以2:
$n << 1
除以2:
$n >> 1
3.乘以2的m次方和除以2的m次方
乘以2的m次方:
$n << $m
除以2的m次方:
$n >> $m
4.判斷整數的奇偶性
($n & 1) == 1
5.不用臨時變數交換兩個數字
$a ^= $b;
$b ^= $a;
$a ^= $b;
6.從低位到高位,取n的第m位元
return ($n >> ($m-1)) & 1;
#7 .從低位到高位.將n的第m位置1
return $n | (1 << ($m-1));
#8.從低位到高位,將n的第m位置0
return $n & ~(1 << ($m-1));
以上是你所不知道的php位元運算子使用技巧總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!