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 相关文章推荐
PHP6 mysql连接方式说明
Feb 09 PHP
php中实现精确设置session过期时间的方法
Jul 17 PHP
完美实现wordpress禁止文章修订和自动保存的方法
Nov 03 PHP
PHP JSON格式的中文显示问题解决方法
Apr 09 PHP
Yii2中DropDownList简单用法示例
Jul 18 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
Sep 23 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 PHP
php nginx 实时输出的简单实现方法
Jan 21 PHP
PHP获取当前系统时间的方法小结
Oct 03 PHP
为你的 Laravel 验证器加上多验证场景的实现
Apr 07 PHP
php在linux环境中如何使用redis详解
Dec 15 PHP
php中yar框架实例用法讲解
Dec 27 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漏洞全解(详细介绍)
2012/11/13 PHP
分享一个超好用的php header下载函数
2014/01/31 PHP
PHP中使用break跳出多重循环代码实例
2015/01/21 PHP
PHP cURL初始化和执行方法入门级代码
2015/05/28 PHP
Jquery拖拽并简单保存的实现代码
2010/11/28 Javascript
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
面向对象的Javascript之三(封装和信息隐藏)
2012/01/27 Javascript
jquery无缝向上滚动实现代码
2013/03/29 Javascript
jquery中文乱码的多种解决方法
2013/06/21 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
推荐8款jQuery轻量级树形Tree插件
2014/11/12 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
ECMAScript6--解构
2017/03/30 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
[47:20]DAC2018 4.4 淘汰赛 Optic vs Mineski 第一场
2018/04/05 DOTA
Python用户推荐系统曼哈顿算法实现完整代码
2017/12/01 Python
对python中类的继承与方法重写介绍
2019/01/20 Python
关于Python 常用获取元素 Driver 总结
2019/11/24 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
IRO美国官网:法国服装品牌
2018/03/06 全球购物
个人自我鉴定总结
2014/03/25 职场文书
财务情况说明书范文
2014/05/06 职场文书
月度优秀员工获奖感言
2014/08/16 职场文书
如何签定毕业生就业协议书
2014/09/28 职场文书
关于有小孩的离婚协议书
2014/10/26 职场文书
2014年文员工作总结
2014/11/18 职场文书
2015年国庆节演讲稿范文
2015/07/30 职场文书
2019幼儿园感恩节活动策划书
2019/11/28 职场文书
MySQL学习总结-基础架构概述
2021/04/05 MySQL
通过Qt连接OpenGauss数据库的详细教程
2021/06/23 PostgreSQL
详解Oracle块修改跟踪功能
2021/11/07 Oracle
Vue的过滤器你真了解吗
2022/02/24 Vue.js
HTML 里 img 元素的 src 和 srcset 属性的区别详解
2023/05/21 HTML / CSS