当前位置:首页 > 技术文档 > 正文内容

关于&^|运算符应用于权限设置方面 php

admin8年前 (2018-09-14)技术文档1663

位运算符

位运算符允许对整型数中指定的位进行求值和操作。

例子名称结果
$a & $bAnd(按位与)将把 $a 和 $b 中都为 1 的位设为 1。
$a | $bOr(按位或)将把 $a 和 $b 中任何一个为 1 的位设为 1。
$a ^ $bXor(按位异或)将把 $a 和 $b 中一个为 1 另一个为 0 的位设为 1。
~ $aNot(按位取反)将 $a 中为 0 的位设为 1,反之亦然。
$a << $bShift left(左移)将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。
$a >> $bShift right(右移)将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。

位移在 PHP 中是数学运算。向任何方向移出去的位都被丢弃。左移时右侧以零填充,符号位被移走意味着正负号不被保留。右移时左侧以符号位填充,意味着正负号被保留。

运算符有的人会说了,用在php中有什么好处,为什么这里要用位运算

那么当我们设定了权限之后,假如要判断某个权限是不是包含另一个权限,这个时候,位运算有很有用,接下来我们看个例子:


首先,设定好权限的值

/** * This file defines common constants used in ownCloud */
namespace OCP;
/** 
 * CRUDS permissions. 
 */
const PERMISSION_CREATE = 4;
const PERMISSION_READ = 1;
const PERMISSION_UPDATE = 2;
const PERMISSION_DELETE = 8;
const PERMISSION_SHARE = 16;
const PERMISSION_GROUP=32;
const PERMISSION_TEAM=64;
const PERMISSION_ALL = 127;



假如$currentPermission = 7;//转换为二进制即:              0000 0000 0000 0111

而\OCP\PERMISSION_CREATE = 4;//转换为二进制即:0000 0000 0000 0100

\OCP\

假如我们要实现判断当有创建的权限的时候,给它将创建的权限去掉,就可以这样写:

if($currentPermission & \OCP\PERMISSION_CREATE){
   $currentPermission = $currentPermission ^ \OCP\PERMISSION_CREATE;
}


7&4 = 0000 0000 0000 0100//等于4


7^4 = 0000 0000 0000 0011//等于3

这样就剔除了创建的权限 ,同样当$currentPermission不包括某个权限的时候给他加上某个权限

if(!($currentPermission & \OCP\PERMISSION_DELETE)){
   $currentPermission = $currentPermission | \OCP\PERMISSION_DELETE;
}

7转换为二进制为:0000 0000 0000 0111


8转换为二进制为:0000 0000 0000 1000

7 & 8 = 0000 0000 0000 0000//值为0即false

7 | 8 =  0000 0000 0000 1111//值为15

此时$currentPermission = 7 | 8 = 15

这样就实现了权限的相加


总结:其实在我看来位运算主要就是起到了一个对权限是否存在的判断,这一点用在这里再好不过。当然权限的定义也是有一定规范的,都是2的指数倍。


转载自:https://blog.csdn.net/m0_37865231/article/details/75516193

分享到:

扫描二维码推送至手机访问。

版权声明:本文由云河空间发布,如需转载请注明出处。

本文链接:https://yuyunhe.cn/index.php/post/285.html

分享给朋友:

“ 关于&^|运算符应用于权限设置方面 php” 的相关文章

php无限分类-总结

//php代码部分  <?php         header('Content-Type:text/html;charset=utf-8');    ...

Zend Studio 8打开utf-8文件出现乱码解决方法

Zend Studio 8打开utf-8文件出现乱码解决方法

今天安装了zend studio 8.0.1,运行了一个PHP程序项目(项目文件编码为utf-8),发现utf-8文件中的中文全部变成乱码了,后面终于经过寻找探索,找到了问题所 在:虽然你的项目是UTF-8编码文件,但是当通过zend studio工具运行打开时,是以工具里设定的GBK编码...

Discuz!二次开发必备知识——DZ程序文件目录含义

分类: DZ程序文件目录含义基于7.0的标准程序,部分与插件无关的文件不作说明文件颜色说明:红色:程序核心文件,修改这类文件时千万要注意安全!橙色:做插件几乎不会用到的文件,大概了解功能就可以了,其实我也不推荐修改这些文件绿色:函数类文件,许多功能强大的自定义函数可以调用这类文件来...

如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)

如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)?先上代码进行java时间转换成unix timestampimport java.text.DateFormat;   import java.text.ParseExceptio...

解决The current branch is not configured for pull No value for key branch.master.merge found in config

1.在本地工程目录找到config文件(我的是在D:\wamp\youthstartup\.git);2.修改config文件内容为:[core]    repositoryformatversion = 0    filemode = false ...

php 操作数组 (合并,拆分,追加,查找,删除等)

php 操作数组 (合并,拆分,追加,查找,删除等)

1. 合并数组array_merge()函数将数组合并到一起,返回一个联合的数组。所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次迫加。其形式为:Php代码  array array_merge (array array1 ...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。