PHP的单例模式

单例模式被当作职责模式,被用来在应用程序中创建一个单一的功能访问点。比如,在OOP中,一个对象只负责一个特定的任务(一个对象去访问数据库等)。

作用:
1)节约系统资源。单例类仅有一个实例存在。
2)维持应用程序状态的同步

特点(至少以下四个特点):
1)必须拥有访问级别为private的构造函数。因为单例类不能在其它类中直接实例化,只能被其自身实例化。
2)拥有一个保存类的实例的静态成员变量。
3)拥有一个访问实例的公共的静态方法。
4)必须创建一个空的访问级别为private的__clone()方法。单例类不会创建实例的副本,而是内部存储的实例返回一个引用。

举例:数据库连接职责的集中控制


class Db
{
   private $_db;   // 构建对象时其值被填充
  public static $_instance;   // 静态变量,用于保存类仅有的一个实例

  private function __construct()
  {
    $this->_db = pg_connnect('.....');
  }

  // 私有的__clone方法消除了PHP语言中可以复制对象,防止破坏单一职责
 private __clone() {}

  // 单例模式的实际构造
 public static function getInstance()
 {
    // 检查静态实例变量是否已保存Db类的一个实例
   if (! (self::$_instance instanceof self)) {
     self::$_instance = new self();
   }

   return self::$_instance;
 }

  public functon query($sql)
  {
     // 执行查询的code
  }
}

发表回复

您的电子邮箱地址不会被公开。