Php物件導向 – 單例模式

來源:互聯網
上載者:User

標籤:物件導向   私人化   instance   單例   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;

        }

}

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.