首頁  >  文章  >  後端開發  >  php中的單例模式

php中的單例模式

autoload
autoload原創
2021-03-02 17:17:586171瀏覽

1.單例模式的由來

  類別是對現實生活中一類具有共同特徵的事物的抽象,透過類別的實例化,產生了許多的對象,但同時也產生了大量資源的消耗(例如在連接資料庫時連接數量的限制,又例如在電腦中開啟資源管理器卻具有唯一性),由此也產生了對類別的實例化進行了限定的需求,為了保護資源的唯一性,由此產生了單例模式

2.單例模式的定義

  定義:單例模式singleton,是一種類別的設計只會產生最多一個物件的設計想法。

3.單例模式的實例

    a.建立一個空類別 。                                                                                  

#
<?php
   class Use{
   }
   $a=new Use();//实例化一个对象
?>

   b. 我們中使用多重執行方法時的結構所建立的原因一樣,所以可透過私人化方法##。 <pre class="brush:php;toolbar:false">&lt;?php class Use{ private function __construct() { echo __FUNCTION__.&quot;&lt;br&gt;&quot;; } } ?&gt;</pre>    c.私有化

建構方法

使得實例化物件產生的數目為0,由此可以透過在類別的內部,透過靜態方法呼叫建構方法,然後將構造方法傳回外部。 <pre class="brush:php;toolbar:false">&lt;?php class Use{ private function __construct() { echo __FUNCTION__.&quot;&lt;br&gt;&quot;; } public static function getInstance() { return new self(); } } $s1=Use::getSingleton(); ?&gt;</pre>   d.雖然能夠透過上述的方法實例化對象,但是同時也將建構方法的使用權限外放出去。如果想要該方法只回傳一個對象,就得確保類別內部有辦法存著某個產生的對象,第一次產生新的,後面回傳舊的。此時需要使用靜態屬性。

<?php
  class Use{
    private static $object = NULL;//初始化为NULL,没有对象 
    
    private function __construct()
    {
      echo __FUNCTION__."<br>";
    }
    
    public static function getInstance()
    {  
      //判断类内部的静态属性是否存在对象
       if(!(self::$object instanceof self)){   //当前保存的内容不是当前类的对象
       self::$object = new self();
    }
      //返回对象给外部
       return self::$object;
    }
   }
  $s1=Use::getSingleton();
?>

  e.此時可以保證,透過呼叫

靜態方法

只得到一個物件。但是依舊可以透過克隆,不停的實例化新的對象,所以可以將克隆#私有化。 <pre class="brush:php;toolbar:false">&lt;?php class Use{ private static $object = NULL;//初始化为NULL,没有对象 private function __construct() { echo __FUNCTION__.&quot;&lt;br&gt;&quot;; } public static function getInstance() { //判断类内部的静态属性是否存在对象 if(!(self::$object instanceof self)){ //当前保存的内容不是当前类的对象 self::$object = new self(); } //返回对象给外部 return self::$object; } private function __clone(){} } $s1=Use::getSingleton(); ?&gt;</pre>

推薦:

php教學#

以上是php中的單例模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn