运行输出如下图:
代码如下:
<?php /** * 单例模式、工厂模式、注册树模式 */ //单例模式 class webSite { //声明属性 public $siteName; //声明本类的静态实例,并初始化 protected static $instance = null; //禁用构造方法 private function __construct($siteName) { $this->siteName = $siteName; } //禁用克隆 private function __clone() { // TODO: Implement __clone() method. } //获取本类的唯一实例 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 webSite::getInstance('PHP中文网 www.php.cn'); } } //把生成的唯一实例对象,挂到注册树上去 /** * class Register * 1、注册:set(),把对象挂到树上 * 2、获取:get(),把对象从树上取下来用 * 3、注销:_unset(),把对象吃掉,O(∩_∩)O哈哈~ */ class Register { //首先,创建对象池,是一个数组 protected static $objects = []; //生成对象,并挂到树上,set()有两个参数,第一个是键名,用别名来做键名;第二个是对象,作为值 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]); } } //将webSite类的实例挂到树上,就是放到对象池 Register::set('site',Factory::create()); //从树上取一个对象下来 $obj = Register::get('site'); //查看一下这个对象长啥样 var_dump($obj); echo '<hr>'; echo '<h2 style="color: #9A0000">'.$obj->siteName.'</h2>';