PHP设计模式之单例模式

很多情况下,我们只需要一个实例化的对象。比如对于数据库类、缓存类等,我们只需要一个实例化的对象即可,过多的实例化对象是一种浪费。

但我们怎么做到一个类智能实例化一个对象呢?通常,我们想要创建一个实例化对象,只需要new即可创建对象。现在,我们不想一个类可以实例化多个对象,那么,就需要私有化构造方法。但构造方法被私有化了,那么如果去实例化对象呢?我们知道,静态方法是属于类本身的,那么可以考虑使用静态方法来实例化对象。但是,如何保证只有一个实例化对象呢?我们可以将实例化对象保存在属性里,每次实例化对象时,对该属性进行判断。

代码如下:

final class Db
{
   private static $mysqli = null;

   private function __construct($config = [])
  {
       // 数据库连接操作
  }

   public static function getInstance ($config = [])
  {
       if (is_null(self::$mysqli)) {
           self::$mysqli = new self($config);
      }

       return self::$mysqli;
  }
}