PHP单例模式 PHP

清尘 2020-10-21 729

单例模式是保证其全局只有一个实例对象。

核心的是一个下面的静态方法和静态的成员变量、

静态方法的主要逻辑就是:如果之前这个类已经被生成过对象了,会用静态属性保存该对象,那么它再次示例化时就会返回这个已经被创建过的对象(静态属性)

构造函数为什么要私有:确保这个类不能被动态实例化

特点:单例模式的方法和属性全局共享,无论在哪里调用方法改变数据都会跟随全局改变





代码示例:

class Singleton
{
    private static $uniqueInstance;
    private $singletonData = '单例类内部数据';
    private function __construct()
    {
        // 构造方法私有化,外部不能直接实例化这个类
    }
    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;
    }
}



  • 在Java等静态语言中,静态变量可以直接new对象,在声明$instance的时候直接给他赋值,

  • 比如 private static instance = new HttpService();这样可以省略掉GetInstance()方法,

  • 但是这个静态变量不管用不用都会直接实例化出来占用内存。这种单例就叫做饿汉式单例模式


  • 我们的代码和例子很明显不是饿汉式的,这种形式叫做懒汉式。你要主动的来用GetInstance()获取,我才会创建对象。


快速回复
最新回复 (0)
返回