PHP 使用二进制保存用户状态的实例


Posted in PHP onJanuary 29, 2018

前言

用户状态保存是一个很常见的需求,一般用来保存用户状态的方式是在数据库表中创建多个字段来存储相应的用户状态,比如要保存用户是否绑定了手机号和QQ,则需要2个字段(mobile,qq)来保存。

如果使用二进制来保存用户的状态的话则只需要1个字段(status)就能保存多个用户状态。

当然使用二进制来保存也有一些坏处,比如不能存储详细的信息,只能用来判断状态,而且在数据库中可读性也比较差。下面是一个比较简单的Demo。

代码

<?php
/**
 * 使用二进制来保存用户状态
 */
//首先定义4个用户状态
define('MOBILE', 1); //手机号绑定
define('EMAIL', 2);  //邮箱绑定
define('WECHAT', 4); //微信绑定
define('QQ', 8);   //QQ绑定
//模拟用户类
class User {
  public $user_name = "";
  public $status = 0; //用来保存用户状态
  function __construct($user_name, $status) {
    $this->user_name = $user_name;
    $this->status = $status;
  }
}
//new一个测试用户
$test_user = new User("test_user", 0);
//先判断用户是否绑定了手机号
if (($test_user->status & MOBILE) == MOBILE)
  echo "first:该用户已经绑定手机号,用户状态是:" . $test_user->status . "</br>";
else
  echo "first:该用户没有绑定手机号,用户状态是:" . $test_user->status . "</br>";
//接着该用户去绑定了手机号 微信 和 QQ
$test_user->status = MOBILE | WECHAT | QQ;
//再判断一下用户是否绑定了手机号
if (($test_user->status & MOBILE) == MOBILE)
  echo "second:该用户已经绑定手机号,用户状态是:" . $test_user->status . "</br>";
else
  echo "second:该用户没有绑定手机号,用户状态是:" . $test_user->status . "</br>";
//再判断一下用户有没有绑定邮箱
if (($test_user->status & EMAIL) == EMAIL)
  echo "third:该用户已经绑定邮箱,用户状态是:" . $test_user->status . "</br>";
else
  echo "third:该用户没有绑定邮箱,用户状态是:" . $test_user->status . "</br>";
//然后这个用户解除了手机号绑定
$test_user->status = ($test_user->status & (~MOBILE));
//再次判断用户是否绑定了手机号
if (($test_user->status & MOBILE) == MOBILE)
  echo "fourth:该用户已经绑定手机号,用户状态是:" . $test_user->status . "</br>";
else
  echo "fourth:该用户没有绑定手机号,用户状态是:" . $test_user->status . "</br>";

以上这篇PHP 使用二进制保存用户状态的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
Memcache 在PHP中的使用技巧
Feb 08 PHP
php上传文件的增强函数
Jul 21 PHP
mysql,mysqli,PDO的各自不同介绍
Sep 19 PHP
9段PHP实用功能的代码推荐
Oct 14 PHP
PHP网络操作函数汇总
May 18 PHP
phpMyAdmin安装并配置允许空密码登录
Jul 04 PHP
PHP中使用GD库绘制折线图 折线统计图的绘制方法
Nov 09 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
Apr 22 PHP
php用户登录之cookie信息安全分析
May 13 PHP
php版交通银行网银支付接口开发入门教程
Sep 26 PHP
PHP实现Session入库/存入redis的方法
May 04 PHP
搜索附近的人PHP实现代码
Feb 11 PHP
thinkphp3.2.0 setInc方法 源码全面解析
Jan 29 #PHP
Ubuntu上安装yaf扩展的方法
Jan 29 #PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
Jan 29 #PHP
php实现的AES加密类定义与用法示例
Jan 29 #PHP
php 判断IP为有效IP地址的方法
Jan 28 #PHP
Laravel中unique和exists验证规则的优化详解
Jan 28 #PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
Jan 27 #PHP
You might like
Thinkphp调用Image类生成缩略图的方法
2015/03/07 PHP
PHP多进程编程实例详解
2017/07/19 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
2020/06/05 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
jquery ajax中使用jsonp的限制解决方法
2013/11/22 Javascript
javascript实现阻止iOS APP中的链接打开Safari浏览器
2014/06/12 Javascript
深入理解JavaScript中的箭头函数
2015/07/28 Javascript
AngularJS基础 ng-submit 指令简单示例
2016/08/03 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
2016/12/27 Javascript
javascript中的面向对象
2017/03/30 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
python进阶教程之函数参数的多种传递方法
2014/08/30 Python
python通过正则查找微博@(at)用户的方法
2015/03/13 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
使用Python+Splinter自动刷新抢12306火车票
2018/01/03 Python
python实现快速排序的示例(二分法思想)
2018/03/12 Python
详解Python3.6的py文件打包生成exe
2018/07/13 Python
Python3.5 Pandas模块之DataFrame用法实例分析
2019/04/23 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
python内打印变量之%和f的实例
2020/02/19 Python
python 中的命名空间,你真的了解吗?
2020/08/19 Python
html标签之Object和EMBED标签详解
2013/07/04 HTML / CSS
canvas之自定义头像功能实现代码示例
2017/09/29 HTML / CSS
世界上最大的冷却器制造商:Igloo Coolers
2019/07/23 全球购物
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
值传递还是引用传递
2015/02/08 面试题
优秀党员转正的自我评价
2013/10/06 职场文书
自荐信格式
2013/12/01 职场文书
中专生的个人自我评价
2013/12/11 职场文书
Mysql基础之常见函数
2021/04/22 MySQL
使用Django实现商城验证码模块的方法
2021/06/01 Python
MySQL修改默认引擎和字符集详情
2021/09/25 MySQL