PHP中單例模式的使用場景與使用方法講解

今天小編就爲大家分享一篇關於PHP中單例模式的使用場景與使用方法講解,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

單例模式按字面來看就是指某一個類只存在一個實例,這一點其實是與靜態方法是相同的,只存在一個實例的好處是當我們需要使用某個類時只需要實例化一次,不需要每次都去new,極大的降低了資源的耗費,比如說數據庫的連接類。

一個類只有一個對象實例含義  

作爲對象的創建模式,單例模式確保某一個類只有一個實例,而且自行實例化並向整個系統全局地提供這個實例。它不會創建實例副本,而是會向單例類內部存儲的實例返回一個引用。

那麼單例模式與靜態方法有什麼區別呢?

個人觀點,如果不存在比較複雜的事務管理,用singleton會比較好,原因有三:

  • 1、單例可以繼承類,實現接口,而靜態類不能(可以集成類,但不能集成實例成員);
  • 2、單例可以被延遲初始化,靜態類一般在第一次加載是初始化;
  • 3、單例模式在使用中比靜態方法更靈活;

雖然這樣說,但到底該選用單例還是靜態,我們還需要視實際情況而定,在設計模式中我們應該做到的是:減少代碼,增加穩定,方便理解,提升性能,減少開銷。

扯遠了,下面我們說回PHP中單例模式的使用。

單例類至少擁有以下三種公共元素:

  • 1、必須擁有一個構造函數,並且必須被標記爲private。
  • 2、擁有一個保存類的實例的靜態成員變量。
  • 3、擁有一個訪問這個實例的公共的靜態方法。

單例模式確保某個類只有一個實例,而且自行實例化並向整個系統提供這個實例。

單例模式是一種常見的設計模式,在計算機系統中,線程池、緩存、日誌對象、對話框、打印機、數據庫操作、顯卡的驅動程序常被設計成單例。

單例模式分3種:懶漢式單例、餓漢式單例、登記式單例。

單例模式有以下3個特點:

1.只能有一個實例。

2.必須自行創建這個實例。

3.必須給其他對象提供這一實例。

那麼爲什麼要使用PHP單例模式?

PHP一個主要應用場合就是應用程序與數據庫打交道的場景,在一個應用中會存在大量的數據庫操作,針對數據庫句柄連接數據庫的行爲,使用單例模式可以避免大量的new操作。因爲每一次new操作都會消耗系統和內存的資源。

具體使用例子:

<?php
/**
 * by www.jb51.net
 */
class Mysql{
 //該屬性用來保存實例
 private static $instance;
 private $conn;
 //構造函數爲private,防止創建對象
 private function __construct(){
 $this->conn = mysql_connect('localhost','root','123456');
 //...
 }
 //創建一個用來實例化對象的方法
 public static function getInstance(){
 if(!(self::$instance instanceof self)){
  self::$instance = new self;
 }
 return self::$instance;
 }
 //防止對象被複制
 public function __clone(){
 trigger_error('Clone is not allowed !');
 }
 //...
 public function query(){
 //do something
 }
}
//使用單例調用類中的方法,不能new 和 clone
Mysql::getInstance()->query();
?>

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對神馬文庫的支持。如果你想了解更多相關內容請查看下面相關鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章