PHP 单例模式是干什么的?

in ShareStduy with 0 comment

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)
?>
Responses