PHP 簡單理解單例模式和static 關鍵字

2021-08-28 19:46:19 字數 1058 閱讀 5349

單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項。

要點主要有三個:

1.乙個類只能有乙個物件;

2.必須是自行建立這個類的物件;

3,要想整個系統提供這乙個物件;

從具體實現角度來說,就是以下三點:

一是單例模式的類只提供私有的建構函式,

二是類定義中含有乙個該類的靜態私有物件,

三是該類提供了乙個靜態的公有的函式用於建立或獲取它本身的靜態私有物件。

當然還要有乙個private的clone方法,防止轉殖;

<?php 

//單例

class uni

//防止轉殖物件

private function __clone()

static public function getinstance($config)

return self::$instance;

}public function getname()

}$db1 = uni::getinstance(1);

$db1 -> getname();

echo "

";$db2 = uni::getinstance(4);

$db2 -> getname();

?>

執行結果:

我被例項化了1

$db1建立物件後,引數是1

$ db2沒有建立物件,而是直接使用$instance儲存的唯一物件,所以輸出的引數並沒有變為4

php中static的定義語句只會被執行一次,但是它的值會被函式記住,直到程式終止

舉個栗子:

<?php

function test()

test(); // 3

test(); // 5

---------------------

無論你例項化了多少個物件,static定義的屬性和方法,都只有乙個! 而且訪問static屬性和方法,只能用::訪問.

單例 簡單理解

單例 定義 只有乙個類模板,只有乙個例項 只能new乙個 解決 乙個併發訪問的時候執行緒安全問題 種類 餓漢式 載入的時候,就例項化,避免了執行緒安全 靜態 static final 懶漢式 用到的時候例項化,延時載入 註冊登記式 每使用一次,都在乙個固定的容器中註冊並且將使用過的物件進行快取,下次...

單例模式理解

單例模式 三要素 1 私有的構造方法 2 私有的靜態的例項物件 3 公共的靜態的提供訪問方法 根據單例模式的建立時機可以將其分為兩種型別 1 懶漢模式 在系統初始化時不會做初始化,會在什麼時候使用到時做初始化操作。public class ehanmoshi private static lanha...

單例模式理解

摘要 本文首先概述了單例模式產生動機,揭示了單例模式的本質和應用場景。緊接著,我們給出了單例模式在單執行緒環境下的兩種經典實現 餓漢式 和懶漢式,但是餓漢式是執行緒安全的,而懶漢式是非執行緒安全的。在多執行緒環境下,我們特別介紹了五種方式來在多執行緒環境下建立執行緒安全的單例,即分別使用synchr...