單例模式確保某個類只有一個實例,並且自行實例化並向整個系統提供這個實例。php
單例模式是一種常見的設計模式,在計算機系統中,線程池、緩存、日誌對象、對話框、打印機、數據庫操做、顯卡的驅動程序常被設計成單例。數據庫
單例模式分3種:懶漢式單例、餓漢式單例、登記式單例。設計模式
單例模式有如下3個特色:緩存
1.只能有一個實例。this
2.必須自行建立這個實例。spa
3.必須給其餘對象提供這一實例。線程
那麼爲何要使用PHP單例模式?設計
PHP一個主要應用場合就是應用程序與數據庫打交道的場景,在一個應用中會存在大量的數據庫操做,針對數據庫句柄鏈接數據庫的行爲,使用單例模式能夠避免大量的new操做。由於每一次new操做都會消耗系統和內存的資源。日誌
<?php //單例模式,是一種經常使用的軟件設計模式。在它的核心結構中只包含一個被稱爲單例的特殊類。 //經過單例模式能夠保證系統中一個類只有一個實例。即一個類只有一個對象實例。 class Page { private $total = 10; //聲明私有屬性 private static $page; //聲明類惟一實例(靜態變量) //static private $page; //等同 聲明類惟一實例(靜態變量) ////聲明私有構造方法爲了防止外部代碼使用new來建立對象。 private function __construct($total) { echo "====加載私有構造方法====<br>"; $this->total = $total; } //聲明靜態類內部惟一獲取實例的方法 static public function getPage($p){ echo "====獲取類實例單例====<br>"; if(!self::$page) self::$page = new self($p); return self::$page; } public function getTotal() { return $this->total; } } //獲取單例實例 $one = Page::getPage(123); //獲取單例實例 $two = Page::getPage(456); echo $one->getTotal(); //輸出:123 echo $two->getTotal(); //輸出:123 不會輸出456 ?>