工厂模式:只要指定类名,就可以据此获取一个该类的对象。

单例模式:某个类,只允许其“创建”出一个对象。

单例的方法:三私一公(一个私有化对象,一个私有化构造方法,一个私有化克隆方法,一个公共方法返回对象)。

DBDA类的单例模式和完整功能:

  1 <?php
  2 //$db = new mysqli('localhost:3306','root','','per_position');
  3 echo '<meta charset="utf-8">';
  4 class DBDA{
  5     //定义数据库链接参数
  6     public $host = 'localhost';
  7     public $user = 'root';
  8     public $pwd = '';
  9     public $database = 'per_position';
 10     public $charset = 'utf8';
 11
 12     //数据库连接对象
 13     public $db = null;
 14     //DBDA对象
 15     private static $link = null;
 16
 17     //禁止构造:初始化数据
 18     private function __construct($configArr=array()){
 19         $this->host = isset($configArr['host']) ? $configArr['host'] : 'localhost';
 20         $this->user = isset($configArr['user']) ? $configArr['user'] : 'root';
 21         $this->pwd = isset($configArr['pwd']) ? $configArr['pwd'] : '';
 22         $this->database = isset($configArr['database']) ? $configArr['database'] : 'per_position';
 23         $this->charset = isset($configArr['charset']) ? $configArr['charset'] : 'utf8';
 24         //链接数据库
 25         $this->connect();
 26     }
 27     //禁止克隆
 28     private function __clone(){}
 29     //提供公有方法返回对象
 30     static function getDb($config=array()){
 31         if(!isset(self::$link)){
 32             self::$link = new self($config);
 33         }
 34         return self::$link;
 35     }
 36     //链接数据库的方法
 37     function connect(){
 38         $this->db = new mysqli($this->host,$this->user,$this->pwd,$this->database);
 39         !mysqli_connect_error() or die('连接失败');
 40         $this->db->query('set names '.$this->charset);
 41     }
 42     //执行sql语句的方法
 43     function query($sql){
 44         $res = $this->db->query($sql);
 45         if(!$res){
 46             echo ("<br />执行失败。");
 47             echo "<br />失败的sql语句为:" . $sql;
 48             echo "<br />出错信息为:" . mysqli_error($this->db);
 49             echo "<br />错误代号为:" . mysqli_errno($this->db);
 50             die();
 51         }
 52         return $res;
 53     }
 54     //返回二维数组
 55     function getAll($sql){
 56         $res = $this->query($sql);
 57         return $res->fetch_all();
 58     }
 59     //返回字符串
 60     function getStr($sql){
 61         $res = $this->query($sql);
 62         $arr = $res->fetch_all();
 63         $str = '';
 64         foreach($arr as $v){
 65             foreach($v as $vv){
 66                 $str .= $vv.",";
 67             }
 68             $str = substr($str,0,-1);
 69             $str .= "^";
 70         }
 71         $str =  substr($str,0,-1);
 72         return $str;
 73     }
 74     //返回json
 75     function getJson($sql){
 76         $res = $this->query($sql);
 77         $arr = $res->fetch_all();
 78         return json_encode($arr);
 79     }
 80     //返回关联数组
 81     function getAssoc($sql){
 82         $res = $this->query($sql);
 83         $arr = array();
 84         while($row = $res->fetch_assoc()){
 85             $arr[$row['department']]=$row;
 86         }
 87         return $arr;
 88     }
 89 }
 90 //$config = array(
 91 //    //'database' => 'mysql'
 92 //);
 93 //$DBDA = new DBDA();
 94 //var_dump($DBDA->getJson('select * from user'));
 95 //看错误提示
 96 //$DBDA->query('select * from 123');
 97 //$res = $DBDA->db->query('select * from user');
 98 //var_dump($res->fetch_all());
 99
100
101
102 //禁用了构造方法,直接new会报错。
103 //$DBDA = DBDA::getDb();
104 //var_dump($DBDA);
105 //echo "<br>";
106 //$DBDA = DBDA::getDb();
107 //var_dump($DBDA);

DBDA类的单例模式和完整功能

1 <?php
2 include('DBDA.class.php');
3 $dbda = DBDA::getDb();
4 var_dump($dbda->getAll('select * from user'));

类的引用

转载于:https://www.cnblogs.com/flypea93/p/9149156.html

0606-工厂模式、单例模式、DBDA的单例和完整功能相关推荐

  1. c# 多线程单例模式_单例模式,多线程单例,双重锁定单例,工场单例创建上下文...

    单例模式,多线程单例,双重锁定单例,工厂单例创建上下文. 单例子模式定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个 ...

  2. 自定义注解(三)支付渠道:消除if-策略模式+工厂模式+单例模式

    自定义支付注解=消除if:策略模式+工厂模式+单例模式 代码取景,知识来源于视频<云析学院[路飞老师]-一次学习终身受用-如何正确使用设计模式写出优雅的代码> 1.定义注解标签 PayCh ...

  3. 10.Java设计模式 工厂模式,单例模式

    Java 之工厂方法和抽象工厂模式 1. 概念 工厂方法:一抽象产品类派生出多个具体产品类:一抽象工厂类派生出多个具体工厂类:每个具体工厂类只能创建一个具体产品类的实例. 即定义一个创建对象的接口(即 ...

  4. 原型模式coding-克隆破坏单例

    我认为补这一段是非常有必要的,所以呢就给大家补了一下,对于原型模式的理解,我们想象一下,如果和单例结合起来应用的话,会怎么样呢,那这个问题,也有可能会被问到,如何破坏单例模式,那通过原型模式的克隆呢, ...

  5. 单例模式示例_单例设计模式示例

    单例模式示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重要的原因 ...

  6. 单例模式(懒汉单例和饿汉单例)

    转载于:http://www.manongjc.com/article/53899.html ==单例模式就是指一个类在整个程序中只有一个实例.==确保一些不需要重复创建的类创建多余的实例.特别是某些 ...

  7. 深入理解单例模式:静态内部类单例原理

    本文主要介绍java的单例模式,以及详细剖析静态内部类之所以能够实现单例的原理.OK,废话不多说,进入正文. 首先我们要先了解下单例的四大原则: 1.构造私有. 2.以静态方法或者枚举返回实例. 3. ...

  8. C++设计模式--单例模式(Singleton)及单例通用模板

    概述 C++中的单例模式应该是设计模式中最简单的了,在编码中常见到.那么,简单的总结下 C++中的单例模式写法,以及根据单例模式扩展后的一些写法,最后还有单例的通用模板,可用于快捷创建一个单例类. 单 ...

  9. 策略模式,工厂模式,单例模式编写身份证的验证算法

    策略模式:它定义算法家族,分别封装起来,让他们之间互相替换,此模式让算法的变化,不会影响使用算法的客户. 1 /// <summary> 2 /// 策略模式 3 /// </sum ...

最新文章

  1. 利刃 MVVMLight 8:DispatchHelper在多线程和调度中的使用
  2. Kali Linux下运行Sniffjoke出错的解决
  3. 【原创】字符串工具类--找出单元字符串
  4. ASP.NET2.0服务器控件之类型化样式属性
  5. mysql存储过程中文乱码_mysql存储过程碰到中文乱码问题
  6. 逻辑运算map函数filter函数reduce函数
  7. C# winform post 请求指定 url
  8. jsp网上零食销售网站系统
  9. iOS不完美越狱手机doubleH3lix无法打开解决方法
  10. theano 全连接代码
  11. 高通芯片校准中的RGI、ICQ是什么意思,校准的特征化是什么意思?(转)
  12. Linux如何打开U盘
  13. springboot集成阿里云短信
  14. element-plus的el-date-picker中value-format属性失效以及只选择到时分值
  15. Cent OS安装中文字体
  16. R语言逻辑操作符:、|、!、||
  17. 单片机ch2o程序_基于单片机的甲醛浓度检测仪的设计_李娟娟
  18. Kafka 心跳机制 重复消费
  19. 10类人不适合睡前喝牛奶助眠
  20. XenCenter软件中的Centos7离线安装yum源,不用wget和crul

热门文章

  1. python模拟抛体运动_换个姿势学物理!用Python和Matplotlib进行模拟
  2. MyBatis配置文件出现错误,已解决(The content of element type )
  3. ruby dbi mysql_Ruby DBI Read 操作 | 菜鸟教程
  4. JAVA代码实现hive连接mysql_Java采用JDBC的方式连接Hive(SparkSQL)
  5. 20190813:(leetcode习题)加一
  6. 数据集 oracle,Analytics 数据集 - Oracle® ZFS Storage Appliance RESTful API 指南,发行版 OS8.6.0...
  7. sql server中的注释快捷键
  8. ArrayList<object> list 转org.json.JSONArray
  9. 50秒开门,3分钟开走,特斯拉Model S就这样不翼而飞
  10. 清华2018顶级数据团队建设全景报告发布:Python最受欢迎,C语言含金量最高