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 相关文章推荐
PHP4实际应用经验篇(1)
Oct 09 PHP
php 信息采集程序代码
Mar 17 PHP
php ajax 静态分页过程形式
Sep 02 PHP
php curl模拟post请求小实例
Nov 13 PHP
php判断是否为json格式的方法
Mar 04 PHP
PHP错误处理函数register_shutdown_function使用示例
Jul 03 PHP
Laravel如何使用Redis共享Session
Feb 23 PHP
php递归函数怎么用才有效
Feb 24 PHP
PHP依赖注入原理与用法分析
Aug 21 PHP
PHP MVC框架中类的自动加载机制实例分析
Sep 18 PHP
laravel 操作数据库常用函数的返回值方法
Oct 11 PHP
PHP 扩展Memcached命令用法实例总结
Jun 04 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
利用js调用后台php进行数据处理原码
2006/10/09 PHP
Thinkphp中Create方法深入探究
2014/06/16 PHP
php动态变量定义及使用
2015/06/10 PHP
php给图片添加文字水印方法汇总
2015/08/27 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
Jquery常用技巧收集整理篇
2010/11/14 Javascript
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
2013/02/22 Javascript
下拉菜单点击实现连接跳转功能的js代码
2013/05/19 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
2013/10/01 Javascript
解决js图片加载时出现404的问题
2020/11/30 Javascript
微信小程序 less文件编译成wxss文件实现办法
2016/12/05 Javascript
javascript实现QQ空间相册展示源码
2017/12/12 Javascript
详解webpack模块化管理和打包工具
2018/04/21 Javascript
JavaScript时间日期操作实例小结【5个示例】
2018/12/22 Javascript
通过GASP让vue实现动态效果实例代码详解
2019/11/24 Javascript
如何优雅地在Node应用中进行错误异常处理
2019/11/25 Javascript
JavaScript设计模型Iterator实例解析
2020/01/22 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
[01:11:32]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
Centos Python2 升级到Python3的简单实现
2016/06/21 Python
pandas 透视表中文字段排序方法
2018/11/16 Python
django-rest-framework解析请求参数过程详解
2019/07/18 Python
python datetime时间格式的相互转换问题
2020/06/11 Python
python中get和post有什么区别
2020/06/19 Python
深入浅析css3 border-image边框图像详解
2015/11/24 HTML / CSS
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
食品营养与检测应届生求职信
2013/11/08 职场文书
文秘档案管理岗位职责
2014/03/06 职场文书
资深HR教你写好简历中的自我评价
2019/05/07 职场文书
新员工入职感言范文!
2019/07/04 职场文书
MySQL时间盲注的五种延时方法实现
2021/05/18 MySQL
教你nginx跳转配置的四种方式
2022/07/07 Servers