码迷,mamicode.com
首页 > Web开发 > 详细

php使用位与运算符【&】或【|】实现权限管理

时间:2016-10-25 14:03:45      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:efi   php   个人   只读   read   缺点   amp   演示   顺序   

权限值是这样的
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
// 定义权限
define("mHIGHT", 16);// 更高的权限,2的4次方
define("mDELETE", 8);// 删除的权限,2的3次方
define("mUPLOAD", 4);// 上传的权限,2的2次方
define("mWRITE", 2);// 写入的权限,2的1次方
define("mREAD", 1);// 只读,2的0次方

// 赋值给权限
echo mDELETE|mUPLOAD|mWRITE|mREAD;

if(19 & 16)
echo ‘有更高的权限<br>‘;

// 判断权限用&【位与符】,假设权限值$key
$key = 13;//13=8+4+1
if($key & mDELETE)
echo ‘有删除权限<br>‘;

if($key & mUPLOAD)
echo ‘有上传权限<br>‘;

if($key & mWRITE)
echo ‘有写入权限<br>‘;

if($key & mREAD)
echo ‘有只读权限<br>‘;

$key = 13;//13=8+4+1
if($key & 8)
echo ‘有删除权限<br>‘;

if($key & 4)
echo ‘有上传权限<br>‘;

if($key & 2)
echo ‘有写入权限<br>‘;

if($key & 1)
echo ‘有只读权限<br>‘;

?>


权限分值的这其中一个算法就是这样的,可以说是简单高效。也不知大家明白没有,不明白也没关系,记住例子就行了。前提就是做好权限值的分布,即那 个1、2、4、8、16….(这里还有个顺序问题,越高级的权限就要越高的权限值,比如上面的例子所演示的删除权限)。有了权限分布表就可以确定给某个人 什么权限了,你简单的理解成要哪个权限就加上相应的权限值吧。
这个方法很好用的,缺点就是如果权限分布得细的话,那么权限值会越来越大,你自己想想,2的几次方、如果所有的权限都要则是全部相加。不过对于一般的权限来说这个已经足够了

php使用位与运算符【&】或【|】实现权限管理

标签:efi   php   个人   只读   read   缺点   amp   演示   顺序   

原文地址:http://www.cnblogs.com/zqifa/p/php-18.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!