整理一下本身的學習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();