PHP單例模式

2022-07-31 05:24:10 字數 1023 閱讀 2567

php單例模式,就是乙個物件只被生成一次,但該物件可以被其它眾多物件使用。單例模式使用最多的場景,是資料庫連線操作。我們知道,生成乙個物件的操作是用new函式來實現,但是new物件都會消耗記憶體,而且有時候對同乙個物件,在不同檔案中可能會生成多次,這就造成了系統資源的浪費。然而使用單例模式,則可以很好的避免這種情況。

以資料庫為例,假設我們有乙個資料庫的類,要實現資料庫連線。如果不使用單例模式,那麼在很多php檔案中,我們可能到要建立這樣的乙個連線,這其實是對資源的很大浪費。那麼下面介紹單例模式實現方法:

<?php

class

database

static

public

function

getinstace()

else

}}

//

錯誤呼叫方法

//用new例項化private標記建構函式的類會報錯

$db = new

database();

//正確獲取例項方法

$db = database::getinstace();

使用單例模式的好處是,當你在其他地方也要使用到這個類,比如上面的資料庫類。那麼你可以在其它地方直接呼叫database::getinstace(),而且該例項只會被生成一次,不會被重複生成,所以不會浪費系統資源。

簡單的說,單例模式生成的例項只被生成一次,而且只負責乙個特定的任務。

使用單例模式有下面幾個要求:

1.建構函式需要標記為private(訪問控制:防止外部**使用new操作符建立物件),單例類不能在其他類中例項化,只能被其自身例項化;

2.擁有乙個儲存類的例項的靜態成員變數;

3.擁有乙個訪問這個例項的公共的靜態方法(常用getinstance()方法進行例項化單例類,通過instanceof操作符可以檢測到類是否已經被例項化);

4.如果嚴謹的話,還需要建立__clone()方法防止物件被複製(轉殖)。(我上面沒建立)

PHP單例模式

模式對於oop開發人員尤其有用,因為他有助於建立穩定的api,並且仍然保持一定的靈活度。一種模式可以幫助我們定義負責完成特定任務的物件,還可以允許我們全部修改掉某個類而不用修改與這些類打交道的 前者被稱為類的職責,後者被稱為類的多型性。單例模式被當作職責模式,他用來在應用程式中建立乙個單一的功能訪問...

php單例模式

單例模式 單例類 1 建構函式需要標記為private 訪問控制 防止外部 使用new操作符建立物件 單例類不能在其他類中例項化,只能被其自身例項化 2 擁有乙個儲存類的例項的靜態成員變數 3 擁有乙個訪問這個例項的公共的靜態方法 常用getinstance 方法進行例項化單例類,通過instanc...

php 單例模式

單例模式 身份證號碼 單例類identitycardno 身份證號碼類 class identitycardno public function getinstance else return self instance private function setidentitycardno no p...