Php物件導向 – 單例模式

來源:互聯網
上載者:User

標籤:io   使用   ar   sp   div   art   c   on   cti   

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;

        }

}

 

 

 

Php物件導向 – 單例模式

聯繫我們

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