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

关于&^|运算符应用于权限设置方面 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://yuyunhe.cn/index.php/post/285.html

分享给朋友:

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

php获取从百度搜索进入网站的关键词

<?php    function search_word_from() {     $referer = isset($_SERVER['HTTP_REFERER'])?...

php批量下载图片

假如现在我现在发现一个网站上的图片保存方式是1001 – 1999目录下都存放着从1开始(数量不等)的.jpg图片,现在我决定用php的方法将图片按照自己需要的样式直接下载到本地   假如图片开始地址为:http://image.xxx.com/img/1001/1...

图文解说Navicat使用ssh方式连接远程MySql服务器

图文解说Navicat使用ssh方式连接远程MySql服务器

如何使用Navicat 8.0 for MySQL连接公司服务器的数据库,但我也是第一次接触这个软件,搞了半天也没连上,在网上找了很多解决的办法,其中就有使用ssh方式连接的,但写的不够详细,因此还是费了一番功夫,自己搞定的,不敢独享,特记录下来 与大家分享。首先,在Navicat的连接设置里选择S...

PHP实现登陆后台限制到只允许一台机器在线

方法一:# <?php# ob_start();# session_start();# class CC{#   private $REFURL="http://www.php100.com";    //登陆成功后转换页面#   private $LoginFLAG=fa...

wamp虚拟主机配置

1、首先打开apache的配置文件httpd.conf,并去掉#Include conf/extra/httpd-vhosts.conf前面的#,启用虚拟主机功能2、先把localhost配置好,免得以后访问localhost出现问题,我的wamp项目根目录是D:\wamp\www。将下面信息添加到...

php二维数组转换为一维数组的几种方法

在开发过程中,我们经常需要将二维数组转为一维数组,个人总结了2种方法,分享给大家如何将下面的二维数组转为一维数组。复制代码 代码如下:$msg = array(  array(    'id'=>'45',    'name'=>'...

发表评论

访客

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