PHP經典設計模式,單例模式、工廠模式、註冊樹模式
阿新 • • 發佈:2019-01-27
學習THINKPHP5.1看視訊時的練習
<?php /** * 單例模式 * 工廠模式 * 註冊樹模式 */ // 單例模式,該類負責建立自己的物件,同時確保只有單個物件被建立。這個類提供了一種訪問其唯一的物件的方式 class Site { // 建立屬性 public $siteName; // 建立一個靜態屬性,用於儲存本類的例項 public static $instance = null; // 建立私有構造器,也就是禁用構造器 // 建構函式私有化後,不能再使用 new 外部呼叫,私有方法只能類內部使用。 private function __construct($siteName) { $this->siteName = $siteName; } // 例項化本類 public static function getInstance($siteName='PHP中文網') { // 判斷當前的靜態屬性是不是當前類的例項,如果不是則建立它 if(!self::$instance instanceof self){ self::$instance = new self($siteName); } return self::$instance; } } // 工廠模式,生成本類的單一例項 class Factory { public static function create() { return Site::getInstance('php.cn'); } } // 物件註冊樹 /** * Class Register * 1. 註冊:set(),將物件掛到樹上 * 2. 獲取:get(),將物件取下來用 * 3. 登出:_unset(),將物件吃掉 */ class Register { // 建立物件池:陣列 protected static $objects = []; // 生成物件並上樹 public static function set($alias,$object){ self::$objects[$alias] = $object; } // 獲取物件 public static function get($alias){ return self::$objects[$alias]; } // 銷燬物件 public static function _unset($alias){ unset(self::$objects[$alias]); } } // 註冊 Register::set('site',Factory::create()); Register::set('site2',Factory::create()); // 獲取 $obj = Register::get('site1'); var_dump($obj); echo $obj->siteName;