zoukankan      html  css  js  c++  java
  • php Singleton Database connection(单例)

    <?php
    abstract class UMA_Plugin_Mongo
    {
        protected $name = null;
        private  $_db;
        //单例模式
     private static $_dbinstance;
        public static function getDbInstance()
        {
         if(self::$_dbinstance == null)
         {
          $_dbinstance = new iDatabase(IDATABASE_PROJECT_ID, IDATABASE_PASSWORD);
         }
         return $_dbinstance;
        }
        public function __construct () {
         
         $this->_db = $this->getDbInstance();//Zend_Registry::get('mongoDB');
        }
       
        public function getDB() {
         return $this->_db;
        }
       
        public function find($query=array(),$sort = array("_id"=>1),$skip=0,$limit=10000) {
         return $this->_db->find($this->name, $query, $sort, $skip, $limit);
        }
       
        public function findOne($query) {
         return $this->_db->findOne($this->name, $query);
        }
       
        public function findAndModify($options) {
         return $this->_db->findAndModify($this->name, $options);
        }
       
        public function count($query) {
         return $this->_db->count($this->name, $query);
        }
       
        public function remove($query) {
         return $this->_db->remove($this->name, $query);
        }
       
        public function insert ($object) {
         return $this->_db->insert($this->name, $object);
        }
       
        public function update ($criteria, $object)
        {
         return $this->_db->update($this->name, $criteria, $object);
        }
       
        public function aggregate(array $ops) {
         return $this->_db->aggregate($this->name, $ops);
        }
       
        public function getCondition($condition = null)
        {
         $query= array();
         if(!empty($condition)){
          foreach($condition as $k=>$v){
           if(!empty($v)){
            $query[$k] = trim($v);
           }
          }
         }      
         return $query;
        }
       
        /**
         * Load Smarty library
         */
        public static function LoadSmarty()
        {
         require_once(SMARTY_DIR.'Smarty.class.php');
         $smarty = new Smarty();
         $smarty->template_dir = BASE_DIR.'templates/';
         $smarty->compile_dir = BASE_DIR.'templates_c/';
         $smarty->left_delimiter = "{{";
         $smarty->right_delimiter = "}}";
         $smarty->allow_php_tag=true;
         return $smarty;
        }
       
        public static function LoadMySmarty()
        {
         require_once(SMARTY_DIR.'MySmarty.php');
         $mysmarty = new MySmarty();
         $mysmarty->template_dir = BASE_DIR.'templates/';
         $mysmarty->compile_dir = BASE_DIR.'templates_c/';
         $mysmarty->left_delimiter = "{{";
         $mysmarty->right_delimiter = "}}";
         $mysmarty->allow_php_tag=true;
         return $mysmarty;
        }
       
        public static  function LoadFront1126Smarty()
        {
         require_once(SMARTY_DIR.'Front1126Smarty.php');
         $mysmarty = new Front1126Smarty();
         $mysmarty->template_dir = BASE_DIR.'templates/';
         $mysmarty->compile_dir = BASE_DIR.'templates_c/';
         $mysmarty->left_delimiter = "{{";
         $mysmarty->right_delimiter = "}}";
         $mysmarty->allow_php_tag=true;
         return $mysmarty;
        }
       
        public static function LoadFrontSmarty()
        {
         require_once(SMARTY_DIR.'FrontSmarty.php');
         $fsmarty = new FrontSmarty();
         $fsmarty->template_dir = BASE_DIR.'templates/';
         $fsmarty->compile_dir = BASE_DIR.'templates_c/';
         $fsmarty->left_delimiter = "{{";
         $fsmarty->right_delimiter = "}}";
         $fsmarty->allow_php_tag=true;
         return $fsmarty;
        }
    }


    //--------------------------------------------------------
    class
    ConnectionFactory
    {
      private static $factory;
      public static function getFactory()
      {
        if(!self::$factory)
        self::$factory =new ConnectionFactory(...);
        return self::$factory;
       }
      private $db;
      public function getConnection()
      {
        if(!$db)   $db =new PDO(...);
        
    return $db;
      }
    }
    //调用
    function getSomething()
    {   $conn =ConnectionFactory::getFactory()->getConnection();...


    //-----------------------------------------实例二------------------------------------------

    class Database Singleton
    {
     
    // [Singleton]
     
    private static $instance =null;
     
    public static function getInstance()
     
    {
       
    if(!self::$instance)
       
    {
         
    self::$instance =new self();
       
    }
       
    return self::$instance;
     
    }
     
    privatefunction __clone(){}
     
    // [/Singleton]

     
    private $connection =null;

     
    private function __construct()
     
    {
        $this
    ->connection = mysql_connect('localhost','root','admin');
       
    if($this->connection)
       
    {
          mysql_select_db
    ('my_database');
       
    }
     
    }

     
    //
     
    // crud operations go here.
     
    //
    }

    $db
    =DatabaseSingleton::getInstance();
    $db
    ->SomeCRUDOperation();

    //----------------------------------实例三-------------------------------------

    class Database
    {
     
    private static $instance =null;

     
    private static $conn;

     
    private function __construct()
     
    {
       
    self::$conn =new mysqli('localhost','root','root','database','3307');
     
    }

     
    public static function getInstance()
     
    {
       
    if(self::$instance ==null){
         
    self::$instance =new Database();
       
    }

       
    return self::$instance;
     
    }

     
    public function query($sql)
     
    {
       
    return self::$conn->query($sql);
     
    }
    }
  • 相关阅读:
    vmware里面的名词 vSphere、vCenter Server、ESXI、vSphere Client
    SQL Server2014 SP2新增的数据库克隆功能
    看完SQL Server 2014 Q/A答疑集锦:想不升级都难!
    Windows Server 2012 NIC Teaming 网卡绑定介绍及注意事项
    最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目
    基于本地存储的kvm虚拟机在线迁移
    SQL Server 数据加密功能解析
    android开发之GestureDetector手势识别(调节音量、亮度、快进和后退)
    Datazen介绍
    jquery智能弹出层,自己主动推断位置
  • 原文地址:https://www.cnblogs.com/fx2008/p/2988563.html
Copyright © 2011-2022 走看看