<?php /** * PHP经典设计模式 * 单例模式 * 工厂模式 * 注册树模式 */ // 单例模式 calss Site{ // 属性 public $siteName; // 本类的静态实例 protected static $instance = null; // 禁用掉构造器 private function __construct($siteName){ $this->siteName = $siteName; } // 获取本类唯一实例 public static function getInstance($siteName = '我在学习Thinkphp5.1'){ if(!self::$instance instanceof self){ // 判断当前类的属性 $instance 是不中当前类的一个实例 self::$instance = new self($siteName); // 如果不是就创建它 } return self::$instance; // 如果已经是当前类的实例,就返回 self::$instance } } // 用工厂模式来生成本类的单一实例 class Factory{ //创建指定类的实例 public static function create(){ return Site::getInstance('www.thinkphp.cn'); } } // 对象注册树 /** * Class Register * 1. 注册:set(),把对象挂到树上 * 2. 获取:get(),把对象取下来 * 3. 注销:_unset(),把对象注销掉 */ class Register{ // 创建对象池:数组 protected static $objects = []; // 生成对象并上树 public static function set($alias,$objects){ self::$objects[$alias] = $objects; } // 从树上取下对象 public static function get($alias){ return self::$objects[$alias]; } // 把树上的对象注销 public static function _unset($alias){ unset(self::$objects[$alias]); } } // 将Site类的实例上树:放到对象池 Register::set('site',Factory::create()); // 从树上取一个对象下来 $obj = Register::get('site'); // 查看一下这个对象 var_dump($obj); echo '<hr>'; echo $obj->siteName;