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笔试题
Aug 04 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
Sep 25 PHP
工厂模式在Zend Framework中应用介绍
Jul 10 PHP
基于php冒泡排序算法的深入理解
Jun 09 PHP
PHP 使用header函数设置HTTP头的示例解析 表头
Jun 17 PHP
PHP常用的缓存技术汇总
May 05 PHP
PHP答题类应用接口实例
Feb 09 PHP
WIFI万能钥匙密码查询接口实例
Sep 28 PHP
[原创]PHP字符串中插入子字符串方法总结
May 06 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
PHP+mysql防止SQL注入的方法小结
Apr 27 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
Oct 30 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 判断网页是否是utf8编码的方法
2014/06/06 PHP
从零开始学YII2框架(六)高级应用程序模板
2014/08/20 PHP
如何在PHP环境中使用ProtoBuf数据格式
2020/06/19 PHP
select组合框option的捕捉实例代码
2008/09/30 Javascript
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
js bind 函数 使用闭包保存执行上下文
2011/12/26 Javascript
JavaScript 数组详解
2013/10/10 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
jQuery弹出下拉列表插件(实现kindeditor的@功能)
2016/08/16 Javascript
[04:29]2016国际邀请赛中国区预选赛Ehome战队教练采访
2016/06/27 DOTA
Python实现简易Web爬虫详解
2018/01/03 Python
python 日期操作类代码
2018/05/05 Python
python实现俄罗斯方块
2018/06/26 Python
Python爬虫框架Scrapy基本用法入门教程
2018/07/26 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
2019/08/19 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
HTML5 video视频字幕的使用和制作方法
2018/05/03 HTML / CSS
新西兰领先的鞋类和靴子网上商城:Merchant 1948
2017/09/08 全球购物
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
菲律宾优惠券网站:MetroDeal
2019/04/12 全球购物
生物科学专业职业规划书范文
2014/02/11 职场文书
网络管理员岗位职责
2014/03/17 职场文书
新年主持词
2014/03/27 职场文书
2015年公司新年寄语
2014/12/08 职场文书
大学生自荐信范文
2015/03/05 职场文书
2015新生加入学生会自荐书
2015/03/24 职场文书
建筑质检员岗位职责
2015/04/08 职场文书
2015年信贷员工作总结
2015/04/28 职场文书
纪录片信仰观后感
2015/06/08 职场文书
研讨会致辞
2015/07/31 职场文书
大学优秀学生主要事迹材料
2015/11/04 职场文书
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL
使用Redis做预定库存缓存功能
2022/04/02 Redis
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript