安哥网络 发表于 2013-12-20 12:16:41

PHP 单例模式解析和实战 -it论坛

PHP 单例模式解析和实战 -it论坛
1、含义   <span]1、PHP缺点:      

(1)、应用程序与数据库交互(2)、控制配置信息
三、如何实现单例模式?1、普通的数据库访问例子:    <?php
    ......
    //初始化一个数据库句柄
    $db = new DB(...);
      
    //添加用户信息
    $db->addUserInfo(...);
      
    ......
      
    //在函数中访问数据库,查找用户信息
    function getUserInfo()
    {
      $db = new DB(...);//再次new 数据库类,和数据库建立连接
      $db = query(....);//根据查询语句访问数据库
    }
      
    ?>2、应用单例模式对数据库进行操作:    <?php
      
    class DB   
    {   
      private $_db;   
      private static $_instance;   
      
      private function __construct(...)   
      {   
            $this->_db = pg_connect(...);//postgrsql   
      }   
      
      private function __clone() {};//覆盖__clone()方法,禁止克隆   
      
      public static function getInstance()   
      {   
            if(! (self::$_instance instanceof self) ) {   
                self::$_instance = new self();   
            }   
            return self::$_instance;   
      }   
      
         
      
      public function addUserInfo(...)
      {
      
         
      
      }
      
         public function getUserInfo(...)
      {   
      
      }
      
    }
      
    //test
      
    $db = DB::getInstance();
      
    $db->addUserInfo(...);
      
    $db->getUserInfo(...);
      
      
    ?>3、深入理解    <?php
    class db {
      public $conn;
      public static $sql;
      public static $instance=null;
      private function __construct(){
            require_once('db.config.php');
            $this->conn = mysql_connect($db['host'],$db['user'],$db['password']);
            if(!mysql_select_db($db['database'],$this->conn)){
                echo "失败";
            };
            mysql_query('set names utf8',$this->conn);         
      }
      public static function getInstance(){
            if(is_null(self::$instance)){
                self::$instance = new db;
            }
            return self::$instance;
      }
      /**
         * 查询数据库
         */
      public function select($table,$condition=array(),$field = array()){
            $where='';
            if(!empty($condition)){
                  
                foreach($condition as $k=>$v){
                  $where.=$k."='".$v."' and ";
                }
                $where='where '.$where .'1=1';
            }
            $fieldstr = '';
            if(!empty($field)){
                  
                foreach($field as $k=>$v){
                  $fieldstr.= $v.',';
                }
               $fieldstr = rtrim($fieldstr,',');
            }else{
                $fieldstr = '*';
            }
            self::$sql = "select {$fieldstr} from {$table} {$where}";
            $result=mysql_query(self::$sql,$this->conn);
            $resuleRow = array();
            $i = 0;
            while($row=mysql_fetch_assoc($result)){
                foreach($row as $k=>$v){
                  $resuleRow[$i][$k] = $v;
                }
                $i++;
            }
            return $resuleRow;
      }
      /**
         * 添加一条记录
         */
         public function insert($table,$data){
            $values = '';
            $datas = '';
            foreach($data as $k=>$v){
                $values.=$k.',';
                $datas.="'$v'".',';
            }
            $values = rtrim($values,',');
            $datas   = rtrim($datas,',');
            self::$sql = "INSERT INTO{$table} ({$values}) VALUES ({$datas})";
            if(mysql_query(self::$sql)){
                return mysql_insert_id();
            }else{
                return false;
            };
         }
         /**
          * 修改一条记录
          */
      public function update($table,$data,$condition=array()){
            $where='';
            if(!empty($condition)){
                  
                foreach($condition as $k=>$v){
                  $where.=$k."='".$v."' and ";
                }
                $where='where '.$where .'1=1';
            }
            $updatastr = '';
            if(!empty($data)){
                foreach($data as $k=>$v){
                  $updatastr.= $k."='".$v."',";
                }
                $updatastr = 'set '.rtrim($updatastr,',');
            }
            self::$sql = "update {$table} {$updatastr} {$where}";
            return mysql_query(self::$sql);
      }
      /**
         * 删除记录
         */
         public function delete($table,$condition){
            $where='';
            if(!empty($condition)){
                  
                foreach($condition as $k=>$v){
                  $where.=$k."='".$v."' and ";
                }
                $where='where '.$where .'1=1';
            }
            self::$sql = "delete from {$table} {$where}";
            return mysql_query(self::$sql);
            
         }
         
      public static function getLastSql(){
            echo self::$sql;
      }
         
         
         
    }
      
    $db = db::getInstance();
    //$list = $db->select('demo',array('name'=>'tom','password'=>'ds'),array('name','password'));
    //echo $db->insert('demo',array('name'=>'最近你啦','password'=>'123'));
    //echo $db->update('demo',array("name"=>'xxx',"password"=>'123'),array('id'=>1));
    echo $db->delete('demo',array('id'=>'2'));
    db::getLastSql();
    echo "<pre>";
    ?>本文摘自it论坛: http://blog.csdn.net/jungsagacity/article/details/7618587

页: [1]
查看完整版本: PHP 单例模式解析和实战 -it论坛