精英盒子 -> 程序设计 -> [LightPHP]PHP持久性键值对应储存类 [打印本页]

jybox 2011-08-06 18:33

[LightPHP]PHP持久性键值对应储存类

这个是LightPHP的一部分,当然,你不可能单独使用这个文件,但是大家可以参考一下源码,学习学习
  1. <?php
    /*
    **        --键值对应类
    **        该类提供了一种键值对应的储存机制,用于保存LightPHP的设置信息,也可供用户使用
    **        该类支持数据库和INI文件两种储存方法
    */
    class Options
    {
        var $_conn=NULL;
        var $_from=NULL;
        var $_safe=1;
        function __construct($tcfgFrom="DEFAULT",$from=NULL,$safe=1)
        {
            $this->_safe=$safe;
            global $cfgFrom;
            $tcfgFrom=strtoupper($tcfgFrom);
            if($tcfgFrom=="DEFAULT")
            {
                $tcfgFrom=$cfgFrom;
            }
            if($tcfgFrom=="DB")
            {
                $this->_conn=new MySQL();
            }
            if($from==NULL)
            {
                global $cfgFromName;
                $from=$cfgFromName;
            }
            $this->_from=$from;
        }
        function __get($kname)
        {
            if($this->_conn)
            {
                $rs=$this->_conn->SQL("SELECT * FROM `{$this->_from}` WHERE `k`='{$kname}'");
                if($rs->getNum())
                {
                    $rs->read();
                    return $rs->v;
                }
                else
                {
                    return NULL;
                }
            }
            else
            {
                $rs=parse_ini_file(dirname(__FILE__)."/../{$this->_from}");
                return str_replace("\\n","\n",$rs[$kname]);
            }
        }
        function __set($kname,$value)
        {
            if($this->_conn)
            {
                $rs=$this->_conn->SQL("SELECT * FROM `{$this->_from}` WHERE `k`='{$kname}'");
                if($rs->getNum())
                {
                    $this->_conn->SQL("UPDATE `{$this->_from}` SET `v`='{$value}' WHERE `k`='{$kname}'");
                }
                else
                {
                    $this->_conn->SQL("INSERT INTO `{$this->_from}` (`k`,`v`) VALUES('{$kname}','{$value}'");
                }
            }
            else
            {
                $rs=parse_ini_file(dirname(__FILE__)."/../{$this->_from}");
                $rs[$kname]=$value;
                foreach($rs as $k => $v)
                {
                    $out="[config]\n";
                    $out=$out.$k."=".str_replace("\n","\\n",$v)."\n";
                }
                if($this->_safe)
                {
                    $out=";<?php /*\n".$out.";*/ ?>\n";
                }
                file_put_contents(dirname(__FILE__)."/../{$this->_from}",$out);
            }
        }
        function debug()
        {
            print_r($this);
        }
    }
    ?>
使用该类保存的INI文件:
  1. ;<?php /*
    [config]
    ui_skin=xgsg
    ;*/ ?>






Powered by phpwind v8.7 Code ©2003-2011 phpwind
Time 0.041985 second(s),query:4 Gzip enabled