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

利用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());
复制代码

 

posted @   cocoajin  阅读(1890)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示