php中的单例模式介绍

单例模式

应用场景一

Windows的Task Manager(任务管理器)、Recycle Bin(回收站)、网站计数器

单例模式应用的场景一般发现在以下条件下:

(1)资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如上述中的日志文件,应用配置。

(2)控制资源的情况下,方便资源之间的互相通信。如线程池等。

单例要四个条件

1.封锁new的操作,不然外部就会每次new都会生成一个实例,这样单例就没有意义了

2.不被别的类重写我的构造方法

3.有一个静态方法给外部调用,这个接口每次都返回当前的实例,当前有实例化的则返回,没有则实例化

4.封锁clone,不然你在外部可以克隆我的对象,这样单例也没意义了

class sigle
{
    // 1 getIns先判断实例
    protected static $ins = null;

    // 2 封锁 new 操作
    // 3 方法前加上final则方法不能被覆盖,类前加final则不能被继承,主要是防止别的类重写__construct,覆盖了,那这里的__construct就无效了,所以要加final
    final protected function __construct()
    {
    }

    // 4 留一个接口来new对象
    public static function getIns()
    {
        if (self::$ins === null) {
            self::$ins = new self();
        }
        return self::$ins;
    }

    // 5 封锁clone,不然外部调用时候再使用clone方法,又会产生新的对象了
    final protected function __clone()
    {
    }
}


/*
   注意
   1 两个对象是一个的时候才会全等 ===
*/

$s1 = sigle::getIns();
$s2 = sigle::getIns();
if ($s1 === $s2) {
    echo '是一个对象';
} else {
    echo '不是一个对象';
}
发布了6 篇原创文章 · 获赞 7 · 访问量 111

猜你喜欢

转载自blog.csdn.net/qq_41672878/article/details/104859568