加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP中设计模式之单例模式

发布时间:2022-07-26 16:46:45 所属栏目:PHP教程 来源:互联网
导读:单例模式 :使得类的一个对象成为系统中的唯一实例. 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变成数组,通过不同的参数来控制。
 

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读