杉哥的个人博客

PHP单例模式

单例模式是一种常见的设计模式

在实际的运用中,存在一些类,只需要实例化一个对象,就可以完成其所有的功能操作,最典型的就是数据库操作。

所以,如果我们能够通过某些技巧,使得一个类只能开辟一个对象空间的话,就可以节省相应的对象资源,这种模式就叫作单例模式

第一步:防止用户通过new关键字无限实例化对象

通过new关键字实例化一个新对象的时候,系统会触发构造方法的自动执行,所以,我们私有化构造方法

第二步:增加一个静态的公开方法,进入类的内部

第三步:为当前类增加一个私有的静态属性

但是,此时,用户还可以通过克隆来得到一个新的对象空间!

解决方案:

第四步:私有化__clone方法

/**
 * 单例模式
 */
class Student {
  // 增加静态的私有属性
  private static $instance;//保存一个当前类的对象
  private function __construct() {

  }
  /**
   * 静态的公开方法,得到当前类的对象
   */
  public static function getInstance() {
    // 判断当前对象是否已经存在
    if(!self::$instance instanceof self) {
      self::$instance = new self;
    }
    return self::$instance;
  }
  private function __clone() {

  }
}

$stu1 = Student::getInstance();
$stu2 = Student::getInstance();
echo '<pre>';
var_dump($stu1, $stu2);