欢迎来到天天文库
浏览记录
ID:51594536
大小:33.16 KB
页数:3页
时间:2020-03-13
《PHP二进制位运算实现状态管理.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、PHP二进制位运算实现状态管理在数据库的设计中通常会遇到一个比较麻烦的事情,那就是存储多种可复选状态应当如何设计,比如:商品状态,访问权限,会员状态等信息。有些程序员或DBA会将每一个状态设置一个字段进行存储,但是这样会浪费非常多的存储空间,也会使系统的开发更加复杂。其实,大多数的系统都会使用二进制进行状态位的存储与管理。例如:我们要实现对商品的状态管理,商品的状态分别有:新品、热销、精品、店长推荐。主要有两种实现方法:第一:使用多个字段进行存储的做法,分别为每一个状态设置一个字段进行存储与管理,一共需要4个字段。第
2、二:使用二进制进行状态位控制的做法,设置1个字段进行存储与管理,类型是整型。那么,如何使用二进制实现对状态的管理?首先来回顾一下PHP中的位运算位运算是针对十进制整数在二进制的基础上进行的运算,即需要将十进制数转换成二进制之后才进行按对应的每位上值的运算。在PHP中的位运算符有:&(位与)
3、(位或)~(位非)^(异或)<<(左移)>>(右移)。由于二进制数只有两个数字,分别是0和1,所以通常用于记录状态类数据。不仅可以有效提高执行效率,还能有效节省存储空间。运行原理:1个整型数据占4个字节,1个字节由8个二进制位组成
4、,于是,要表现出十进制的1、2、4、8分别为:00000000000000000000000000000001//十进制数:100000000000000000000000000000010//十进制数:200000000000000000000000000000100//十进制数:400000000000000000000000000001000//十进制数:8我们可以看出,它们分别代表着一个位置上的状态。我们可以将商品的四个状态分别用4个状态位来表示,即:00000000000000000000000000000
5、001//表示新品00000000000000000000000000000010//表示热销00000000000000000000000000000100//表示精品00000000000000000000000000001000//表示店长推荐于是:当管理员选择商品状态为热销时,只需要将十进制数2存入数据库中即可。当管理员选择商品状态为新品时,只需要将十进制数1存入数据库中即可。当管理员选择商品状态为新品和热销时,二进制值为00000011,转换为十进制数为3,所以只需要将十进制数3存入数据库中即可表示目前商品
6、状态为新品和热销。当管理员选择商品状态同时为新品、热销、精品、店长推荐时,四个状态位都被开启,此时的二进制值为00001111,即十进制的15。也就是说,数字15即代表了四个商品状态同时开启。接着我们再来看一下如何实现对商品的状态管理。对商品状态进行管理包含了:判断状态,开启状态,关闭状态。但是有一个前提条件是,必须要有一状态位常量作为参考对象,也就是十进制的1、2、4、8、16等各状态位单独表示的数字。判断状态:使用状态位常量和商品状态值进行位与(&)运算,结果为真则为开启,为假则为关闭。开启状态:使用状态位常量和
7、商品状态值进行位或(
8、)运算,将结果重新赋值给商品状态变量。关闭状态:使用状态位常量取反后再和商品状态值进行与(&)运算,将结果重新赋值给商品状态变量。具体实现代码:(仅做判断是否选中商品状态)HTML文件:商品状态:新品9、tus[]"/>热销精品店长推荐PHP文件:10、'S2',2);define('S3',4);define('S4',8);//使用状态位常量作为判断依据if(S1&$status){echo'新品:是';}else{echo'新品:否';}echo'';if(S2&$status){echo'热销:是';}else{echo'热销:否';}echo'';if(S3&$s
9、tus[]"/>热销
10、'S2',2);define('S3',4);define('S4',8);//使用状态位常量作为判断依据if(S1&$status){echo'新品:是';}else{echo'新品:否';}echo'';if(S2&$status){echo'热销:是';}else{echo'热销:否';}echo'';if(S3&$s
此文档下载收益归作者所有