19-4单例模式简介–PHP实战开发教程

19-4单例模式简介–PHP实战开发教程

霞鞍蘑炉瑞忍蹭手饱轨冀戏咖



 单例模式:一个类仅允许创建一个实例
 例如:
 1.一个站点仅连接一个数据库连接对象
 2.一个站点仅允许存在一个配置类的实例对象
 


新建demo1.php

<?php
class Config
{
    /**
     * 必须先声明一个静态私有属性:用来保存当前类的实例
     * 1. 为什么必须是静态的?因为静态成员属于类,并被类所有实例所共享
     * 2. 为什么必须是私有的?不允许外部直接访问,仅允许通过类方法控制方法
     * 3. 为什么要有初始值null,因为类内部访问接口需要检测实例的状态,判断是否需要实例化
     */
    private static $instance = null;
    //保存用户的自定义设置
    private  $setting=[];
    //构造器私有化,禁止从类外部实例化
    //即不允许在外部通过new 类的时候调用构造方法初始化
    private function __construct()
    {
    }
    //克隆方法私有化,禁止从类外部克隆对象
    private function __clone()
    {

    }

    //创建一个当前类的一个实例,并且是唯一的实例
    public static function getInstance()
    {
        //如果当前类的$instance为null 即实例化它
        if(self::$instance==null)
        {
            self::$instance=new self();
        }
        //如果已经有了当前类实例,就直接返回,不要重复创建类实例
        return self::$instance;
    }

    //设置配置项 index:索引
    public function set($index,$value)
    {
        $this->setting[$index]=$value;
    }

    //获取配置项
    public function get($index)
    {
        return $this->setting[$index];
    }


}
$config1=Config::getInstance();
$config2=Config::getInstance();
var_dump($config1);
echo "<hr>";
var_dump($config2);

执行,创建的是同一个对象,符合单例模式的定义

19-4单例模式简介–PHP实战开发教程第1张


<?php
class Config
{
    /**
     * 必须先声明一个静态私有属性:用来保存当前类的实例
     * 1. 为什么必须是静态的?因为静态成员属于类,并被类所有实例所共享
     * 2. 为什么必须是私有的?不允许外部直接访问,仅允许通过类方法控制方法
     * 3. 为什么要有初始值null,因为类内部访问接口需要检测实例的状态,判断是否需要实例化
     */
    private static $instance = null;
    //保存用户的自定义设置
    private  $setting=[];
    //构造器私有化,禁止从类外部实例化
    //即不允许在外部通过new 类的时候调用构造方法初始化
    private function __construct()
    {
    }
    //克隆方法私有化,禁止从类外部克隆对象
    private function __clone()
    {

    }

    //创建一个当前类的一个实例,并且是唯一的实例
    public static function getInstance()
    {
        //如果当前类的$instance为null 即实例化它
        if(self::$instance==null)
        {
            self::$instance=new self();
        }
        //如果已经有了当前类实例,就直接返回,不要重复创建类实例
        return self::$instance;
    }

    //设置配置项 index:索引
    public function set($index,$value)
    {
        $this->setting[$index]=$value;
    }

    //获取配置项
    public function get($index)
    {
        return $this->setting[$index];
    }


}
$config=Config::getInstance();
$config->set('host','localhost');
echo $config->get('host');

执行:

19-4单例模式简介–PHP实战开发教程第2张


蠢氦匡霜敲怜寒芯串冯椽秀肚