PHP 单例模式
就是一个类只能实例化一次,如果有一个config配置文件,然后实例化多次的话,
在运行过程中修改了配置的话,就不知道哪个配置中进行了修改。
这样使用单例模式的话就避免了这个情况发生
代码
class Site{
//属性
public $siteName;
protected static $instance=null;
//不允许实例化
protected function __construct(){}
protected function __clone(){}
public static function getInstance(){
if(!self::$instance instanceof self){
self::$instance=new self();
}
return self::$instance;
}
}
$test = Site::getInstance();
var_dump($test);
<?php
//
/**
* 单例模式
* 工厂模式
* 注册树模式
*
*/
//单例模式
class Site
{
//属性
public $siteName;
protected static $instance = null;
//不允许实例化
protected function __construct($siteName)
{
$this->siteName=$siteName;
}
protected function __clone()
{
}
public static function getInstance($siteName = 'Hello,单例模式')
{
if (!self::$instance instanceof self) {
self::$instance = new self($siteName);
}
return self::$instance;
}
}
//工厂模式
class Factory
{
//创建制定类的实例
public static function create()
{
return Site::getInstance();
}
}
/** 注册对象数
* Class Register
* 1.注册:set() 把对象挂到树上
* 2. 获取:get() 把对象取下来用
* 3. 3.注销 _unset:把对象删除
*/
class Register
{
//创建对象池 array
protected static $objects = array();
//1.set
public static function set($alias,$object){
self::$objects[$alias]=$object;
}
//2.get
public static function get($alias){
return self::$objects[$alias];
}
//3.unset
public static function _unset($alias){
unset(self::$objects[$alias]);
}
}
Register::set('site',Factory::create());
$obj =Register::get('site');
var_dump($obj);
var_dump($obj->siteName)
?>