当前位置:Gxlcms > PHP教程 > php单例模式设计数据库并连接Model类

php单例模式设计数据库并连接Model类

时间:2021-07-01 10:21:17 帮助过:13人阅读

利用《【Java】单例模式》(点击打开链接)介绍的思想可以将这个数据库链接类搞成单例,不会因为多个用户访问网站就创建一个数据库查询实例,拖慢整个网站的速度,让网站的数据库压力比较大,造成网站的速度下降得很厉害。

单例实现最关键的,还是那3点:

1、私有构造函数,这里无须像Java那样私有无参数的构造函数,php不允许有多个构造函数——即使这些构造函数参数不同也不可以。

2、私有克隆类的函数

3、暴露一个公有的“创造实例函数”供调用,这个“创造实例函数”判断如果已存在相应实例,返回此实例,没有才创建。

这样保证此数据库连接类有且只有一个。

直接用一个例子说明,数据库test中有表user


先利用利用单例模式设计数据库连接Model类,将这张表的内容查询到网页上:


    1. <?php
    2. class db{
    3. private $link;
    4. //db类单例开始
    5. //保存类实例的私有静态成员变量
    6. private static $_instance;
    7. //定义一个私有的构造函数,确保单例类不能通过new关键字实例化,只能被其自身实例化
    8. private function __construct($host,$username,$password,$database){
    9. $this->link=mysql_connect($host,$username,$password);
    10. if(!$this->link){
    11. die("连接失败!");
    12. }
    13. mysql_query("set names utf8;");
    14. mysql_select_db($database);
    15. }
    16. //定义私有的__clone()方法,确保单例类不能被复制或克隆
    17. private function __clone(){}
    18. public static function getInstance($host, $username, $password,$database) {
    19. //检测类是否被实例化
    20. if(!(self::$_instance instanceof self)){
    21. self::$_instance=new db($host,$username,$password,$database);
    22. }
    23. return self::$_instance;
    24. }
    25. //执行SQL语句
    26. public function query($query){
    27. return mysql_query($query, $this->link);
    28. }
    29. //关闭数据库连接
    30. public function close(){
    31. return mysql_close($this->link);
    32. }
    33. }
    34. //调用单例类测试部分
    35. header("Content-type: text/html; charset=utf-8"); //设置网页编码
    36. $dbconnector=db::getInstance("localhost","root","root","test");//创建数据库连接类
    37. $result=$dbconnector->query("select * from user");//查询数据库
    38. for($i=0;$row=mysql_fetch_array($result);$i++){//打印查询结果
    39. echo $row['id'].",".$row['username'].",".$row['password']."<br/>";
    40. }
    41. ?>


这样保证了class db所对应的实例$dbconnector有且只有一个,再有一句:

    1. $dbconnector1
    2. =db::getInstance(
    3. "localhost"
    4. ,
    5. "root"
    6. ,
    7. "root"
    8. ,
    9. "test"
    10. );
    11. //创建数据库连接类


还是会返回原来的已经创建实例$dbconnector,更应该说操作$dbconnector与$dbconnector1是同样的效果,它们就是同一个东西,不会在服务器的内存上多开辟资源来存放$dbconnector与$dbconnector1,因为db被单例了,从而达到减少数据库压力的目的。

相关推荐:

设计数据库之经验谈_PHP教程

以上就是php单例模式设计数据库并连接Model类的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行