天天看點

php之單例模式

/1**

* 設計模式之單例模式

* $_instance必須聲明為靜态的私有變量

* 構造函數和析構函數必須聲明為私有,防止外部程式new

* 類進而失去單例模式的意義

* getInstance()方法必須設定為公有的,必須調用此方法

* 以傳回執行個體的一個引用

* ::操作符隻能通路靜态變量和靜态函數

* new對象都會消耗記憶體

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

* 使用單例模式生成一個對象後,

* 該對象可以被其它衆多對象所使用。

*/

class Danli {

//儲存類執行個體的靜态成員變量

private static $_instance;

//private标記的構造方法

private function __construct(){

echo 'This is a Constructed method;';

}

//建立__clone方法防止對象被複制克隆

public function __clone(){

trigger_error('Clone is not allow!',E_USER_ERROR);

}

//單例方法,用于通路執行個體的公共的靜态方法

public static function getInstance(){

if(!(self::$_instance instanceof self)){

self::$_instance = new self;

}

return self::$_instance;

}

public function test(){

echo '調用方法成功';

}

}

//用new執行個體化private标記構造函數的類會報錯

//$danli = new Danli();

//正确方法,用雙冒号::操作符通路靜态方法擷取執行個體

$danli = Danli::getInstance();

$danli->test();

//複制(克隆)對象将導緻一個E_USER_ERROR

$danli_clone = clone $danli;