Php物件導向 – 單例模式_PHP教程

來源:互聯網
上載者:User

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,就能執行個體化一次...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.