<?php
/*
*單例模式
*工廠模式
*註冊樹模式
*/
//單例模式
class Site
{
//屬性
public $siteName;
//本類的靜態實例
protected static $instance = null;
//禁用構造器
private function __construct($siteName)
{
$this->siteName = $siteName;
}
//獲取本類唯一實例
public static function getInstance($siteName = 'PHP中文網')
{
if (!self::$instance instanceof self) { //判斷當前$instance屬性是否爲當前類的實例
self::$instance = new self($siteName); //實例化當前類賦值給$instance
}
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());
//從樹上取一個對象下來
$obg=Register::get('site');
//查看這個對象
var_dump($obg); //object(Site)#1 (1) { ["siteName"]=> string(10) "www.php.cn" }
echo $obg->siteName; // www.php.cn