PHP位运算与或异或
应用场景:下面用一个简单的小技巧告别这种不科学和反人类的设计吧!
你是否遇到过这样的问题?我现在有个功能有很多权限控制,但是我不能使用很多字段用1,0来存储这么多权限,这样做感觉太low了,而且判断起来需要用到很多字段,维护起来好麻烦,后期如果再新增其他权限还需要新增字段。
这里只需要用到几个php的位运算,参照php官方文档
文章图片
所以我们只需要用一个十进制数字来存储这些权限即可,十进制转换为二进制后的每一位都代表一个权限,为1则有权限,为0则无权限。
show me the code!
这样就可以通过一个字段来实现多个权限的控制啦!
例如audit_type为14【PHP位运算与或异或】总结:
二进制:1 1 1 0
write二进制:0 0 1 0
read二进制:0 1 0 0
high二进制:1 0 0 0
audit_type & write 的时候就得到二进制 0 0 1 0,十进制2
audit_type & read 的时候就得到二进制 0 1 0 0,十进制4
audit_type & high 的时候就得到二进制 1 0 0 0,十进制8
audit_type ^ write 的时候就得到二进制 1 1 0 0,可以看到这样做就会把write的位置为0,也就是取消了权限,同理可以取消其他权限
audit_type为0想加权限
audit_type | write 的时候就得到二进制 0 0 1 0,十进制2
audit_type | write | read 等
只要定义好各个权限的数值就可以通过下面的操作来进行权限控制了
使用或 | 来加权限
使用与 & 来判断权限
使用异或 ^ 来去除权限
推荐阅读
- 2018-02-06第三天|2018-02-06第三天 不能再了,反思到位就差改变
- Shell-Bash变量与运算符
- 每日一话(49)——一位清华教授在朋友圈给大学生的9条建议
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 发小的串门
- 2020-10-18|2020-10-18 致各位慢友
- thinkphp|thinkphp 3.2 如何调用第三方类库
- CGI,FastCGI,PHP-CGI与PHP-FPM
- 失踪的钢笔
- 152