單例模式是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個實例。 《設計模式》對此的定義:保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。 單例模式有三個要點:一是某個類只能有一個實例;二是它必須自行創建這個實例;三是它必須自行向整 ...
單例模式是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個實例。 《設計模式》對此的定義:保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。 單例模式有三個要點:一是某個類只能有一個實例;二是它必須自行創建這個實例;三是它必須自行向整個系統提供這個實例。 所以,針對單例模式的實現有一下幾點: 一是單例模式的類只提供私有的構造函數,二是類定義中含有一個該類的靜態私有對象,三是該類提供了一個靜態的公有的函數用於創建或獲取它本身的靜態私有對象。 代碼實例如下:
<?php class sigle{ protected static $ins = null; public static function getIns(){ if(self::$ins===null){ self::$ins = new self(); } return self::$ins; } /** * 封鎖構造函數。 * protected可以防止被直接new出來 * final可以防止在子類中被覆蓋。 * 如果在父類中加了protected,但是在子類中public,仍然可以直接new。 */ final protected function __construct(){ } final protected function __clone(){ } }
解析說明:
說明一:final protected function __construct(){
}
protected是為了防止該類在本類中被new出來。
final是為了防止子類中覆蓋被保護的構造方法,並public出去。例如:
class multi extends sigle{
public function __construct(){
}
}
$m = new multi();
var_dump($m);
echo '<br/>';
說明二:final protected function __clone(){}
首先需要解決在php中,對象複製和__clone函數的問題。