PHP 單例模式實現

jopen 10年前發布 | 1K 次閱讀 PHP

<?php
/*
 

  • User: jifei
  • Date: 2013-07-31
  • Time: 23:19 */ /**
  • Class Singleton
  • 單例模式,也叫單子模式,是一種常用的軟件設計模式。在應用這個模式時,單例對象的類必須保證只有一個實例存在,
  • 充分體現了 DRY(Don't Repeat Yourself)的思想。 *
  • 實現單例模式的思路是:一個類能返回對象一個引用(永遠是同一個)和一個獲得該實例的方法(必須是靜態方法,通常使用getInstance這個名稱);
  • 當我們調用這個方法時,如果類持有的引用不為空就返回這個引用,如果類保持的引用為空就創建該類的實例并將實例的引用賦予該類保持的引用;
  • 同時我們還將該類的構造函數定義為私有方法,這樣其他處的代碼就無法通過調用該類的構造函數來實例化該類的對象,只有通過該類提供的靜態方法來得到該類的唯一實例。 *
  • 應用場景:適用于一個類只有一個實例的場景。數據庫連接,日志記錄,購物車
  • 缺點:PHP運行是頁面級別的,無法直接實現跨頁面的內存數據共享。 */ class Singleton { //保存類實例的私有的靜態成員變量 private static $_instance; //私有的構造方法 private function __construct() {
     echo 'This is a Constructed method;';
    
    } //創建一個空的私有clone方法防止對象被克隆 private function clone() { } //單例方法,用于獲取唯一的實例對象 public static function getInstance() {
     if (!(self::$_instance instanceof self)) {
         //instanceof用于檢測對象與類的從屬關系,is_subclass_of對象所屬類是否類的子類
         self::$_instance = new self();
     }
     return self::$_instance;
    
    } //測試 public function test() {
     echo 123;
    
    } } $a = Singleton::getInstance(); $a->test(); echo PHP_EOL; $b = Singleton::getInstance(); //第二次調用時不執行構造方法 $b->test(); echo PHP_EOL; //$c=new Singleton();由于構造方法私有,這個會報錯的 //$d=clone $a;克隆對象報錯</pre>
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!