php 设计模式之 单例



1. 单例模式

保证一个类仅有一个实例,并提供一个访问它的全局访问点


2. 实列

class Singleton {
    private static $uniqueInstance;   // 静态实例
    private $singletonData = '单例类内部数据';

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

    public static function GetInstance() {   
        if (self::$uniqueInstance == null) {
            self::$uniqueInstance = new Singleton();   // 实例自身
        }
        return self::$uniqueInstance;
    }

    public function SingletonOperation(){
        $this->singletonData = '修改单例类内部数据';
    }

    public function GetSigletonData()
    {
        return $this->singletonData;
    }

}

$singletonA = Singleton::GetInstance();
echo $singletonA->GetSigletonData(), PHP_EOL;

$singletonB = Singleton::GetInstance();

if ($singletonA === $singletonB) {
    echo '相同的对象', PHP_EOL;
}
$singletonA->SingletonOperation(); // 这里修改的是A
echo $singletonB->GetSigletonData(), PHP_EOL;


3. 使用场景

  1. laravel中在 ioc 容器部分使用单例模式

4. 扩展

  1. 单例在PHP中到底是不是唯一的

    如果在一个进程下,也就是一个fpm下,是唯一的
    nginx同步拉起的多个fpm中那肯定就不是唯一的啦,一个进程一个

posted @ 2020-12-31 21:12  linsonga  阅读(58)  评论(0编辑  收藏  举报