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;
}
}
http://www.bkjia.com/PHPjc/871193.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/871193.htmlTechArticlePhp物件導向 – 單例模式 Php物件導向 – 單例模式 保證類只有一個執行個體 1. 如何可以解決一個類可以被無限地執行個體化? New,就能執行個體化一次...