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 相关文章推荐
最简单的PHP程序--记数器
Oct 09 PHP
用php获取远程图片并把它保存到本地的代码
Apr 07 PHP
php 变量未定义等错误的解决方法
Jan 12 PHP
redis 队列操作的例子(php)
Apr 12 PHP
php 表单提交大量数据发生丢失的解决方法
Mar 03 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
Sep 23 PHP
学习php设计模式 php实现原型模式(prototype)
Dec 07 PHP
简单谈谈 php 文件锁
Feb 19 PHP
php微信开发之图片回复功能
Jun 14 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
May 27 PHP
laravel 解决路由除了根目录其他都404的问题
Oct 18 PHP
PHP如何通过带尾指针的链表实现'队列'
Oct 22 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
php 禁止页面缓存输出
2009/01/07 PHP
PHP日期时间函数的高级应用技巧
2009/05/16 PHP
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
2014/08/06 PHP
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
PHP实现小程序批量通知推送
2018/11/27 PHP
权威JavaScript 中的内存泄露模式
2007/08/13 Javascript
js 获取屏幕各种宽高的方法(浏览器兼容)
2013/05/15 Javascript
自定义百度分享的分享按钮
2015/03/18 Javascript
jquery模拟进度条实现方法
2015/08/03 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
JavaScript数组去重的几种方法效率测试
2016/10/23 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
Angular2实现自定义双向绑定属性
2017/03/22 Javascript
基于substring()和substr()的使用以及区别(实例讲解)
2017/12/28 Javascript
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
2020/04/15 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
python安装与使用redis的方法
2016/04/19 Python
Python实现随机生成有效手机号码及身份证功能示例
2017/06/05 Python
python使用tornado实现登录和登出
2018/07/28 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
Python实现简单的用户交互方法详解
2018/09/25 Python
在PyCharm中实现关闭一个死循环程序的方法
2018/11/29 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
python实现修改固定模式的字符串内容操作示例
2019/12/30 Python
django 数据库返回queryset实现封装为字典
2020/05/19 Python
商务英语大学生职业生涯规划书范文
2014/01/01 职场文书
运动会广播稿80字
2014/01/23 职场文书
校运会宣传稿大全
2015/07/23 职场文书
python基础之文件处理知识总结
2021/05/23 Python
python读取并查看npz/npy文件数据以及数据显示方法
2022/04/14 Python
SpringCloud超详细讲解Feign声明式服务调用
2022/06/21 Java/Android