學習php設計模式之單例模式

來源:互聯網
上載者:User
  1. /**

  2. * php設計模式之單例模式
  3. * $_instance必須聲明為靜態私人變數
  4. * 建構函式和解構函式必須聲明為私人,防止外部程式new
  5. * 類從而失去單例模式的意義
  6. * getInstance()方法必須設定為公有的,必須調用此方法
  7. * 以返回執行個體的一個引用
  8. * ::操作符只能訪問靜態變數和靜態函數
  9. * new對象都會消耗記憶體
  10. * 使用情境:最常用的地方是資料庫連接。
  11. * 使用單例模式產生一個對象後,
  12. * 該對象可以被其它眾多個物件所使用。
  13. * @link http://bbs.it-home.org
  14. */

  15. class Danli {

  16. //儲存類執行個體的靜態成員變數
  17. private static $_instance;
  18. //private標記的構造方法
  19. private function __construct(){
  20. echo 'This is a Constructed method;';
  21. }
  22. //建立__clone方法防止對象被複製複製
  23. public function __clone(){
  24. trigger_error('Clone is not allow!',E_USER_ERROR);
  25. }

  26. //單例方法,用於訪問執行個體的公用的靜態方法

  27. public static function getInstance(){
  28. if(!(self::$_instance instanceof self)){
  29. self::$_instance = new self;
  30. }

  31. return self::$_instance;

  32. }

  33. public function test(){

  34. echo '調用方法成功';
  35. }
  36. }

  37. //用new執行個體化private標記建構函式的類會報錯

  38. //$danli = new Danli();
  39. //正確方法,用雙冒號::操作符訪問靜態方法擷取執行個體
  40. $danli = Danli::getInstance();
  41. $danli->test();
  42. //複製(複製)對象將導致一個E_USER_ERROR
  43. $danli_clone = clone $danli;
  44. ?>

複製代碼
  • 聯繫我們

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