单例模式(Singleton Pattern)

使用场景:

  • 1、要求生产唯一序列号。
  • 2、WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。
  • 3、I/O 与数据库的连接,频繁地创建与销毁。

实现:

Singleton.php

<?php


class Singleton
{
    private static $obj;
    private $str = '默认数据';

    private function __construct()
    {
        // 构造方法私有化,外部不能直接实例化这个类
    }

    /**
     * 判断对象,使对象全局唯一
     * @return Singleton
     */
    public static function call()
    {
        if (self::$obj == null) {
            self::$obj = new Singleton();
        }
        return self::$obj;
    }

    /**
     * 修改数据
     */
    public function setStr(){
        $this->str = '修改数据';
    }

    /**
     * 获取数据
     * @return string
     */
    public function getStr()
    {
        return $this->str;
    }
}

最主要的就是call方法,判断使对象唯一并实例化用静态变量保存。

调用:

$demo1 = Singleton::call();
echo $demo1->getStr();
echo "\n";
$demo2 = Singleton::call();
echo $demo2->getStr();
echo "\n";
$demo1->setStr();
echo $demo1->getStr();
echo "\n";
echo $demo2->getStr();

 可以看出,demo1和demo2的值是一样的,做到了全局唯一。

posted @ 2021-09-14 09:49  感情就是后人乘凉  阅读(28)  评论(0编辑  收藏  举报