PHP面向对象之单例模式

MengDe 153 2021-08-14

何为单例模式,他的使用场景?他有哪些特点?让我来告诉你。

如何实现一个单例模式的类,只需要四步:

1.禁止外部new操作

2.给外部开放获取方法

3.禁止子类继承修改构造函数

4.禁止克隆

如何实现:

<?php
/**
 * @author MengDe <9258405@qq.com>
 * @date   2021/8/14 14:22
 * 单例模式讲解
 */

//单例模式使用场景:例如数据库 多次new 会造成多次开销,如何保证只让他只能new一次?

class single
{
    //第一步禁止外部new操作 在new操作的时候会用到魔术方法 __construct
    //我们将它保护起来 但是私有化的话会造成什么呢? 造成所有人都别想new了
    //    protected function __construct()
    //    {
    //    }

    //所以 第二步 ,我们要给他一个实现new的方法
    //实际上 自身new也是new 这样做是没有任何意义的 那么我们改一改
    //    public static function getInit()
    //    {
    //        return new self();
    //    }
    //定义一个保护的变量
    protected static $init = null;

    public static function getInit()
    {
        //只有当他为null的时候我们再new自身
        // 否则的话就返回之前new过的数据即可
        if (self::$init == null) {
            self::$init = new self();
        }
        return self::$init;
    }
    //第三步 在被基础的时候 子类如果去修改了我们的最开始的构造函数 给他放开了 那么就达不到单例模式的效果!
    //    我们给构造函数改造一下 在之前加上关键字 final 让子类无法修改 只能继承
    final protected function __construct()
    {
    }

    //第四步 我们要禁止调克隆 防止被克隆
    final protected function __clone()
    {
        // TODO: Implement __clone() method.
    }
}

$sign1 = single::getInit();
$sign2 = single::getInit();
echo $sign1 === $sign2;//true


上一篇:PHP面向对象之工厂模式
下一篇:[Z-Blog插件]-附件管理PRO 1.0.1
相关文章