PHP設計模式-Singleton 單例(單元素)模式

整理一下本身的學習Aaron Saray 寫的PHP設計模式一些demo和本身的理解。大佬看完若是發現鄙人理解有誤請當即指出,感謝拍磚,跪求鞭打php

/**
 * Singleton  單例(單元素)模式實現
 * -------------------------------------
 * ** 來自說明 **
 * 
 * 經過提供對自身共享實例對訪問,單元素(單例)設計模式用於限制特定對象只能被建立一次。
 * 此對象可能最多存儲自身的5個實例,若是出現第6個請求,那麼不得不等待。
 * 或者只是提供對先前建立的5個實例之一的引用在排隊請求中,這種體系結構類型特別有用
 * 
 * ===================================== 
 * ** 應用場景 **
 * 
 * 最經常使用於數據庫鏈接對象,數據庫訪問對象能夠負責建立一個與數據庫的實例化鏈接。
 * 接下來,只要調用這個對象的特定方法,該對象就會使用已成功建立的鏈接。
 * 從而減小服務器開銷 
 * -------------------------------------
 * 
 * @version ${Id}$
 * @author Shaowei Pu <pushaowei@qq.com>
 */
<?php


class Singleton  
{
    /**
     * [$_instance 實例容器]
     * @var null
     */
    private static $_instance = NULL ;
    /**
     * [$_pdo pdo容器]
     * @var null
     */
    private  $_pdo = NULL ;

    /**
     * [__clone 閹割掉克隆]
     * @author         Shaowei Pu <pushaowei@qq.com>
     * @CreateTime    2017-02-08T11:20:19+0800
     * @return                              [type] [description]
     */
    private function __clone(){}

    /**
     * [__construct 不能new啦]
     * @author         Shaowei Pu <pushaowei@qq.com>
     * @CreateTime    2017-02-08T11:18:09+0800
     */
    private function __construct(){
        try{
            $this->pdo =new \PDO("mysql:dbname=數據庫名字;host=127.0.0.1,root,123456");
            $this->pdo->exec('SET NAMES utf8');//設置通訊編碼
            $this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
        }catch(PDOException $e){
            die('error:'.$e->getMessage());
        }   
      }
      /**
       * [getinstance 單例開始]
       * @author         Shaowei Pu <pushaowei@qq.com>
       * @CreateTime    2017-02-08T11:21:31+0800
       * @return                              [type] [description]
       */
      public static function getInstance(){
          // 檢測其並非本類實例
          if( !self::$_instance instanceof self ){
              self::$_instance = new self; 
          }
          return self::$_instance;
      }
      /**
       * [select 簡單查詢操做]
       * @author         Shaowei Pu <pushaowei@qq.com>
       * @CreateTime    2017-02-08T12:11:06+0800
       * @param                               [type] $dbname [description]
       * @param                               [type] $filed  [description]
       * @param                               [type] $where  [description]
       * @return                              [type]         [description]
       */
    public function select($dbname,$filed,$where)
    {
        $stmt = self::$_pdo ->prepare(" SELECT {$filed} FROM {$dbname} {$where}");
        $stmt->execute();
          return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

}
Singleton::getInstance();
相關文章
相關標籤/搜索