设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP中设计模式之单例模式

发布时间:2022-07-25 13:06 所属栏目:121 来源:互联网
导读:单例模式 :使得类的一个对象成为系统中的唯一实例. PHP中使用单例模式最常见的就是数据库操作了。避免在系统中有多个连接数据库的操作,浪费系统资源的现象,就可以使用单例模式。每次对数据库操作都使用一个实例。 简单示例 class DB { // 用来存储自己实例
       单例模式 :使得类的一个对象成为系统中的唯一实例.
 
  PHP中使用单例模式最常见的就是数据库操作了。避免在系统中有多个连接数据库的操作,浪费系统资源的现象,就可以使用单例模式。每次对数据库操作都使用一个实例。

  简单示例
 
  class DB {
 
  // 用来存储自己实例
 
  public static $instance = array();
 
  public $conn;
 
  // 私有化构造函数,防止外界实例化对象
 
  private function __construct($host, $username, $password, $dbname, $port) {
 
  $this->conn = new mysqli($host, $username, $password, $dbname, $port);
 
  }
 
  // 静态方法,单例访问统一入口
 
  public static function getInstance($host, $username, $password, $dbname, $port) {
 
  $key = $host.":".$port;
 
  if (!(self::$instance[$key] instanceof self)){
 
  self::$instance[$key] = new self($host, $username, $password, $dbname, $port);#实例化
 
  }
 
  return self::$instance[$key];
 
  }
 
  //query
 
  public function query($ql) {
 
  return $this->conn->query($sql);
 
  }
 
  // 私有化克隆函数,防止外界克隆对象
 
  private function __clone() {}
 
  //释放资源
 
  public function __destruct(){
 
  $this->conn->close();
 
  }
 
  }。

     简单示例
 
  class AClass {
 
  // 用来存储自己实例
 
  public static $instance;
 
  // 私有化构造函数,防止外界实例化对象
 
  private function __construct() {}
 
  // 私有化克隆函数,防止外界克隆对象
 
  private function __clone() {}
 
  // 静态方法,单例访问统一入口
 
  public static function getInstance() {
 
  if (!(self::$instance instanceof self)){
 
  self::$instance = new self();
 
  }
 
  return self::$instance;
 
  }
 
  // test
 
  public function test() {
 
  return "done";
 
  }
 
  // 私有化克隆函数,防止外界克隆对象
 
  private function __clone() {}
 
  }
 
  class BClass extends AClass{
 
  }
 
  // 获取实例
 
  $aclass = AClass::getInstance();
 
  $bclass = BClass::getInstance();
 
  // 调用方法
 
  echo $aclass->test();
 
  对一些比较大型的应用来说,可能连接多个数据库,那么不同的数据库公用一个对象可能会产生问题,比如连接句柄的分配等,我们可以通过给$instance变成数组,通过不同的参数来控制。
 

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读