~~~
<?php
//單例模式
class Site{
//屬性
public $siteName;
//本類的靜態實例
protected static $instance = null;
//禁用掉構造器
private function __construct($siteName)
{
$this->siteName = $siteName;
}
//獲取本類的唯一實例
public 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('www.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]);
}
}
//將site類的實例上樹,放到對象池
Register::set('site',Factory::create());
//從樹上取一個對象下來
$obj = Register::get('site');
~~~
對象注冊樹其實就是一個容器類,用來管理類的依賴(類實例)