謝謝你們的收藏與贊,這是對我最大的鼓勵。這一系列文章主要是一些PHP經常使用的類操做,回顧一下面向對象,我一直致力於小白文章的撰寫,由於我也是小白,相信有人須要,但願讀者可以喜歡。php
內容涉及面向對象、數據庫、文件操做、購物車、分頁、圖像處理、JSON數據接口,你可能須要有一點知識基礎,固然,這些內容都是獨立的,能夠選擇性的參看。mysql
<?php /** * TODO:數據庫模型類 * Author:entner * time: 2017-5-6 * version:1.0 */ Class DB{ protected $HOST = '127.0.0.1'; //主機地址 protected $DATABASE; protected $USER ="root"; //數據庫用戶名 protected $ROOT ="root"; //數據庫用戶密碼 private static $resource; //數據庫鏈接資源句柄 private static $instance; //靜態變量保存類的惟一實例 /** * 構造函數和克隆函數必須聲明爲私有的,防止外部獲取 */ private function __construct(){ echo "hello"; } /** * TODO:獲取操做類實例 * 單例模式:只給一個入口 * static : 讓鏈接靜態化,不須要重複聲明 */ public static function getInstance(){ if(!self::$instance instanceof self){ self::$instance = new self(); } return self::$instance; } /** * TODO:數據庫鏈接 * @pagram $dbname string 數據庫名稱 */ public function connect($dbname = "mail"){ $this->DATABASE = $dbname; /* 判斷數據庫是否鏈接 */ if(!self::$resource){ self::$resource = mysqli_connect($this->HOST,$this->USER,$this->ROOT,$this->DATABASE); /* 若是數據庫鏈接失敗 */ if(!self::$resource){ throw new Execption('mysql connect error'.mysqli_connect_error()); } /* 設置編碼 */ mysqli_query(self::$resource,"set names UTF8"); } return self::$resource; } } /**********Coding 1********************* $res = DB::getInstance()->connect("base"); print_r($res); die; ********************************/ /**********Coding 2********************* $res = new DB(); $res::getInstance()->connect(); 由於構造函數的私有性,這一句會產生fatal error 錯誤 ********************************/ /**********Coding 3********************* $a = DB::getInstance(); $a->connect(); $b = DB::getInstance(); $b->connect(); echo "<pre>"; print_r($a); print_r($b); 只會執行一次構造函數,說明$a $b是類的同一個實例 ********************************/
若是不看構造函數和getInstance方法,其實能夠看的出來,實現數據庫操做類很簡單,只須要把數據庫鏈接函數的參數看成類成員變量,而後調用就好了,可是這裏用了一個簡單的設計模式——單例模式,總之加上它,代碼會更便捷、健壯,下面簡單講講。sql
其實從技術上考慮主要是考慮節省內存資源(由於訪問數據庫的話咱們實例一次就夠了,不須要重複實例[2019.5.28 update]),提高系統性能,但實際可以感覺到的就是更方便,並且逼格高一些,因此用它。數據庫
舉個例子,就是大樓只有一個入口,方便控制,用面向對象來講,就是一個類只有一個實例,方便管理。設計模式
你能夠用coding 3的代碼查看輸出結果,而後你會發現構造函數只執行了一次,說明,第一次實例化對象以後,後面的變量對對象的引用是一致的,說明實例實際上只有一個。瀏覽器
函數也是變量,靜態化變量,無論引用多少次,都不會重複生成,比較節省空間,這裏並不考慮多線程的問題。多線程
PHP 單例模式解析和實戰
PHP 設計模式 單例模式
單例模式5種實現方式
語言中,靜態方法和非靜態方法你懂多少?架構
有沒懂的或者又以爲不對的,歡迎你們留言。函數
我會把源代碼放在GitHub主頁上,別擔憂,是中文,有須要的能夠訪問下載.性能