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. 使用场景
- laravel中在 ioc 容器部分使用单例模式
4. 扩展
-
单例在PHP中到底是不是唯一的
如果在一个进程下,也就是一个fpm下,是唯一的
nginx同步拉起的多个fpm中那肯定就不是唯一的啦,一个进程一个