程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> Php面向對象 – 單例模式

Php面向對象 – 單例模式

編輯:關於PHP編程

Php面向對象 – 單例模式


Php面向對象 – 單例模式

保證類只有一個實例

1. 如何可以解決一個類可以被無限地實例化?

New,就能實例化一次,怎麼去限制,用戶不能無限次地new?

將構造方法私有化。所有外部的new都操作失敗

class MySQLDB

{

private function __construct()

{

}

}

2. 一旦構造方法私有化,意味著類不能再類外實例化。但可以在類內實例化。

增加一個公共的靜態方法,通過類來調用該方法,在方法內可以執行new操作。

class MySQLDB

{

private function __construct()

{

}

public static function getInstance()

{

return new MySQLDB;

}

}

$o = MySQLDB::getInstance();

此時,用戶需要該類的對象,方法內的代碼就會執行,因此,我們可以通過完善方法內的邏輯,限制用戶得到對象的操作。

3. 在上面的方法內,使用這樣的邏輯:每次執行時做判斷,判斷該類是否已經實例化對象,如果實例化了,則直接返回這個實例化好的對象。如果沒有實例化,則實例化一個新的,然後返回。

如何判斷?

在這個對象被實例化出來時,保存起來。

例子:

class MySQLDB

{

private static $instance;

private function __construct()

{

}

public static function getInstance()

{

if(!self::$instance instanceof self)

{

self::$instance= new self;

}

return self::$instance;

}

}

4. 克隆也可以得到新對象,因此需要限制克隆。

私有化 __clone()方法

class MySQLDB

{

private static $instance;

private function __construct()

{

}

private function __clone()

{

}

public static function getInstance()

{

if(!self::$instance instanceof self)

{

self::$instance= new self;

}

return self::$instance;

}

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved