PHP设计模式之单例模式
来源: 阅读:640 次 日期:2015-02-03 14:33:32
温馨提示: 小编为您整理了“PHP设计模式之单例模式”,方便广大网友查阅!

单例模式 :使得类的一个对象成为系统中的唯一实例.

PHP中使用单例模式最常见的就是数据库操作了。避免在系统中有多个连接数据库的操作,浪费系统资源的现象,就可以使用单例模式。每次对数据库操作都使用一个实例。

简单示例

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变成数组,通过不同的参数来控制

简单示例

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();

}

}

更多信息请查看IT技术专栏

更多信息请查看网络编程
手机网站地址:PHP设计模式之单例模式
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map