利用php的序列化和反序列化来做简单的数据本地存储

如下程序可以做为一个工具类

      /**
    * 利用php的序列化和反序列化来做简单的数据本地存储
    */
    class objectdb
    {

        private static $db;

        //成功返回 objectdb 对象,不需要在外面使用new
        //目录需要写文件的权限
        public function defaultdb($dbname=‘./default.db‘)
        {
            self::$db = $dbname;
            if(file_exists($dbname))
            {
                    return new objectdb();
            }

               $ret=file_put_contents($dbname,serialize(array()));
               if ($ret > 0) {
                    return new objectdb();
               }
               return false;
        }

        //添加数据key,value 或更新
        public function setValueForKey($key,$value)
        {
            $arrdata = $this->getDBarray();
            $arrdata[$key] = $value;
            return $this->setDBarray($arrdata);
        }

        //删除指定key的数据
        public function removeValueForKey($key)
        {
            $arrdata = $this->getDBarray();
            unset($arr[$key]);
        }

        //获取指定key的数据
        public function getValueForKey($key)
        {
            $arrdata = $this->getDBarray();
            return $arrdata[$key];
        }

        //获取所有的数据
        public function getAll()
        {
            $arrdata = $this->getDBarray();
            return $arrdata;
        }

        //获取所有的key
        public function getAllKey()
        {
            $arrdata = $this->getDBarray();
            return array_keys($arrdata);
        }

        //清空db数据
        public function cleardb()
        {
            $ret=file_put_contents(self::$db,serialize(array()));
            return $ret;
        }

        //private get
        private function getDBarray()
        {
            $rdata=file_get_contents(self::$db);
             return unserialize($rdata);
        }

        //private set
        private function setDBarray($arr)
        {
            $ret=file_put_contents(self::$db,serialize($arr));
            if ($ret > 0) {
                return true;
            }else
            {
                return false;
            }
        }

    }

测试代码如下

    //test
    $dbhandle = objectdb::defaultdb();
    if (!$dbhandle) {
        echo "init failure!";
        exit();
    }

    echo "start <br>";
    var_dump($dbhandle->getAll());

    echo "<br>add 1 <br>";
    $dbhandle->setValueForKey("baidu","www.baidu.com");
    $dbhandle->setValueForKey("qq","www.qq.com");
    $dbhandle->setValueForKey("taobao","www.taobao.com");
    var_dump($dbhandle->getAll());

    echo "<br>mod 1 <br>";
    $dbhandle->setValueForKey("baidu","http://www.baidu.com");
    var_dump($dbhandle->getAll());

    echo "<br>get 1 <br>";
    echo $dbhandle->getValueForKey("baidu");

    echo "<br>get 1 <br>";
    var_dump($dbhandle->getAllKey());

    echo "<br>clear 1 <br>";
    $dbhandle->cleardb();

    echo "<br>get 1 <br>";
    var_dump($dbhandle->getAll());
时间: 2024-11-10 01:55:06

利用php的序列化和反序列化来做简单的数据本地存储的相关文章

一起来做chrome扩展《本地存储localStorage》

chrome中的本地存储其实也是用的HTML5中localStorage,唯一区别是chrome扩展有自己的localStorage,它属于这个扩展,而不属于一个域名.得用这一点可以很好的处理扩展自己的一些数据,而不受访问网站和域名的影响. localStorage基础 localStorage是HTML5特性,所以有些浏览器不一定支持,不过我们这里讲的是chrome扩展,所以完全不用担心这个问题.如果想在WEB页面上使用,那就要检查一下是不是支持它 可以这样的检测: if(window.loc

利用反射实现序列化和反序列化

主程序 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Xml.Serialization; using System.Diagnost

项目之——利用json实现序列化与反序列化

comm目录下的另外几个文件 使用了开源的库jsoncpp,可下载. (1)my_json.h   1 #include<iostream>   2 #include<unistd.h>   3 #include<string>   4 #include "json/json.h"   5    6 class my_json   7 {   8 public:   9     my_json();  10     ~my_json();  11  

XmlSerializer 对象的Xml序列化和反序列化,XMLROOT别名设置

这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中的对象如果需要传递给其他系统使用:或者在关机时需要保存下来以便下次再次启动程序使用就需要序列化和反序列化. 范围:本文只介绍xml序列化,其实序列化可以是二进制的序列化,也可以是其他格式的序列化. 看一段最简单的Xml序列化代码 1 2 3 4 5 6 7 8 9 10 11 12 class Prog

Python 解析模块 异常模块 响应模块 序列化和反序列化组件

解析模块(后端根据指定的解析规则来解析前端发来的数据) 为什么要配置解析模块 1)drf给我们通过了多种解析数据包方式的解析类 2)我们可以通过配置来控制前台提交的哪些格式的数据后台在解析,哪些数据不解析 3)全局配置就是针对每一个视图类,局部配置就是针对指定的视图来,让它们可以按照配置规则选择性解析数据 源码入口 # APIView类的dispatch方法中 request = self.initialize_request(request, *args, **kwargs) # 点进去 #

Apache Avro 序列化与反序列化 (Java 实现)

像两个交流一样要找一个互相能理解的语言, 在国内为普通话, 跑国外多用英语相通, 两个进程间通信也需要找一个大家都能理解的数据格式. 简单的如 JSON, XML, 那是自我描述性格式, XML 有 Schema 定义, 但尚无正式的 JSON Schema 规范. 在讲求效率的场合, 纯文本式的数据交换格式无法满足要求, 于是有二进制的 Google Protobuf 和 Apache Avro. 在 Apache 的生态像 Hadoop, Kafka 中自然是选用 Avro. Avro 支持

【BigData】Java基础_ObjectOutputStream与ObjectInputStream实现序列化与反序列化

1.概念 ObjectOutputStream用于序列化 ObjectOutputStream用于反序列化 所谓的序列化,其实就是将对象转化为二进制 举个例子说明: 例如,我在京东上买了一张木床,京东发货的时候,肯定不会给我发一张已经拼接好的木床,因为这样不方便运输,那么快递公司会将床先拆开,然后附上安装说明书,这就叫做序列化,等我拿到床的时候,我再把床按照说明书组装起来,这就叫做反序列化. 2.代码案例 2.1 简单对象的序列化与反序列化 文件1:User.java 一个存储用户信息的java

利用JavaScriptSerializer类 进行Json对象的序列化和反序列化和过滤

项目下载:JavaScriptSerializer_对JSON对象序列化与反序列化及过滤器 利用<JavascriptSerializer类> 进行Json对象的序列化和反序列化 1. 首先, JavascriptSerializer类所在名空间: using System.Web.Script.Serialization; 2. 相关的3篇文章, 标记下: 使用JavaScriptSerializer进行JSON序列化 注意:    是复杂对象. JSON是Javascript中常用的数据格

利用 进行Json对象的序列化和反序列化 - RJ - 博客园

利用<JavascriptSerializer类> 进行Json对象的序列化和反序列化 - RJ - 博客园 利用<JavascriptSerializer类> 进行Json对象的序列化和反序列化 进行Json对象的序列化和反序列化 - RJ - 博客园,bubuko.com" href="http://www.bubuko.com/infodetail-217182.html" target=_blank>利用 进行Json对象的序列化和反序列