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

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

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

位运算符

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

例子名称结果
$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://www.yuyunhe.cn/index.php/post/285.html

分享给朋友:

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

Win8重装及恢复系统方法

Win8重装及恢复系统方法

Win8重装及恢复系统方法  win8正式版已经发布了一段时间,大家纷纷进行试用,如果操作系统出现问题了怎么办,我们该怎么进行恢复呢?本文就教大家如何重装及恢复win8系统。        首先,我们从屏幕右侧的Charm条进入“更改电脑设置”选项。在“常...

dz中“QQ互联”出现Discuz! Database Error解决办法

dz中“QQ互联”出现Discuz! Database Error解决办法

dz中QQ登陆出现Discuz! Database Error解决办法dz站长朋友相信肯定有人遇到做的QQ互联登录,根本没法用,这让网站的社交登录性能大打折扣,这么解决?下面就看大神的神操作!...

wamp下虚拟主机的配置

1  编辑httpd.conf,查找Include conf/extra/httpd-vhosts.conf,把前面注释符号“#”删掉。 2  编辑httpd-vhosts.conf,我把WAMPServer安装在D:/wamp,所以我这里的路径是D:\wamp\Apache2\...

PHP利用Curl模拟登录并获取数据例子

PHP利用Curl模拟登录并获取数据例子

几乎所有的程序员来模仿用户登录或抓取数据都会使用到curl函数,下面我来给各位介绍利用curl函数实现登录并抓取数据,希望下面例子对各位有帮助。PHP的curl()在抓取网页的效率方面是比较高的,而且支持多线程,而file_get_contents()效率就要稍低些,当然,使用curl时需要开启下c...

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

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

PHP数组和Json之间的转换

        之所以要用到Json,很多时候是因为使用ajax对象时,程序与JS函数之间的数据交互。因为JS不认识PHP中的数组,PHP也不认识JS中的数组或对象。Json很好的解决了这个问题。Json简介  ...

发表评论

访客

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