PHP之單例模式

2021-09-07 15:07:05 字數 1628 閱讀 9962

之前記得有寫過php的幾種這模式。這幾天看群裡在問單列模式,覺得還是有必要再深入寫清楚下。。其實單例模式很好理解滴哦

單例模式顧名思義,就是只有乙個例項,作為物件的建立模式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。

單例模式的三個要點:

1.某個類只能有乙個例項。

2.必須自行建立這個例項。

3.必須自行向整個系統提供這個例項。

為什麼要使用php單例模式?

1.php的應用有乙個大方面是針對於資料庫,乙個應用中會存在大量的資料庫操作,在使用物件導向的方式開發時,如果使用單例模式,就可以避免大量的new 操作消耗的資源,還可以減少資料庫連線,這樣就不容易出現too many connections情況。

2.如果乙個系統中需要乙個類來全域性控制某些配置資訊,那麼,使用單例模式可以很方便的實現。

3.在一次頁面請求中便於進行除錯,因為所有**都集中在乙個類中,可以在類中設定鉤子,輸出日誌,避免到處的var_dump(),echo。

這個例項足以深入理解單利模式的妙用:

<?php/**

* 設計模式之單例模式

* $_instance必須宣告為靜態的私有變數

* 建構函式必須宣告為私有,防止外部程式new類從而失去單例模式的意義

* getinstance()方法必須設定為公有的,必須呼叫此方法以返回例項的乙個引用

* ::操作符只能訪問靜態變數和靜態函式

* new物件都會消耗記憶體

* 使用場景:最常用的地方是資料庫連線。

* 使用單例模式生成乙個物件後,該物件可以被其它眾多物件所使用。 */

class

girlfriend

//單例方法

public

static

function

get_instance()

return self::$_instance

; }

//阻止使用者複製物件例項

private

function

__clone()

function

test()

}//這個寫法會出錯,因為構造方法被宣告為private

//$test = new girlfriend;

// 下面將得到該類的單例物件

$test = girlfriend::get_instance();

$test = girlfriend::get_instance();

$test->test();

//複製物件將導致乙個e_user_error.

//$test_clone = clone $test;

上面兩次呼叫:girlfriend::get_instance() 而建構函式只是在初始例項時呼叫一次,並且初始的var_dump(isset(self::$_instance)) 返回false,後面多次例項都未輸出建構函式...var_dump(isset(self::$_instance)) 都返回了true。。。

名副其實的乙個類只有乙個例項...相信這個例子大家應該可以深入理解啦.

php之單例模式

本週我們後台討論小組需要討論設計模式之單例模式,單例模式是最簡單的設計模式之一,於是我花了點時間研究了一下。廢話不多說,進入正題。1.定義 單例模式最初的定義出現於 設計模式 艾迪生維斯理,1994 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。2.問題 在php程式設計中,和資料庫打交道...

PHP之單例模式

單例模式 也叫單態模式 好像各個地方都是叫單例!是一種常用的軟體設計模式。這個模式規定單例物件的類必須保證這個類只能有乙個例項的存在,並提供乙個訪問它的全域性訪問點 就算new,也只能讓你new乙個物件,畢竟國內是一夫一妻制 應用場景 由於這個東西不是什麼新奇的玩意,我就結合高手的和我自己的理解例項...

PHP設計模式之單例模式

1 單例模式概念 單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。2 uml靜態模型 3 單...