0606-工厂模式、单例模式、DBDA的单例和完整功能
工厂模式:只要指定类名,就可以据此获取一个该类的对象。
单例模式:某个类,只允许其“创建”出一个对象。
单例的方法:三私一公(一个私有化对象,一个私有化构造方法,一个私有化克隆方法,一个公共方法返回对象)。
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的单例和完整功能相关推荐
- c# 多线程单例模式_单例模式,多线程单例,双重锁定单例,工场单例创建上下文...
单例模式,多线程单例,双重锁定单例,工厂单例创建上下文. 单例子模式定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个 ...
- 自定义注解(三)支付渠道:消除if-策略模式+工厂模式+单例模式
自定义支付注解=消除if:策略模式+工厂模式+单例模式 代码取景,知识来源于视频<云析学院[路飞老师]-一次学习终身受用-如何正确使用设计模式写出优雅的代码> 1.定义注解标签 PayCh ...
- 10.Java设计模式 工厂模式,单例模式
Java 之工厂方法和抽象工厂模式 1. 概念 工厂方法:一抽象产品类派生出多个具体产品类:一抽象工厂类派生出多个具体工厂类:每个具体工厂类只能创建一个具体产品类的实例. 即定义一个创建对象的接口(即 ...
- 原型模式coding-克隆破坏单例
我认为补这一段是非常有必要的,所以呢就给大家补了一下,对于原型模式的理解,我们想象一下,如果和单例结合起来应用的话,会怎么样呢,那这个问题,也有可能会被问到,如何破坏单例模式,那通过原型模式的克隆呢, ...
- 单例模式示例_单例设计模式示例
单例模式示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重要的原因 ...
- 单例模式(懒汉单例和饿汉单例)
转载于:http://www.manongjc.com/article/53899.html ==单例模式就是指一个类在整个程序中只有一个实例.==确保一些不需要重复创建的类创建多余的实例.特别是某些 ...
- 深入理解单例模式:静态内部类单例原理
本文主要介绍java的单例模式,以及详细剖析静态内部类之所以能够实现单例的原理.OK,废话不多说,进入正文. 首先我们要先了解下单例的四大原则: 1.构造私有. 2.以静态方法或者枚举返回实例. 3. ...
- C++设计模式--单例模式(Singleton)及单例通用模板
概述 C++中的单例模式应该是设计模式中最简单的了,在编码中常见到.那么,简单的总结下 C++中的单例模式写法,以及根据单例模式扩展后的一些写法,最后还有单例的通用模板,可用于快捷创建一个单例类. 单 ...
- 策略模式,工厂模式,单例模式编写身份证的验证算法
策略模式:它定义算法家族,分别封装起来,让他们之间互相替换,此模式让算法的变化,不会影响使用算法的客户. 1 /// <summary> 2 /// 策略模式 3 /// </sum ...
最新文章
- 利刃 MVVMLight 8:DispatchHelper在多线程和调度中的使用
- Kali Linux下运行Sniffjoke出错的解决
- 【原创】字符串工具类--找出单元字符串
- ASP.NET2.0服务器控件之类型化样式属性
- mysql存储过程中文乱码_mysql存储过程碰到中文乱码问题
- 逻辑运算map函数filter函数reduce函数
- C# winform post 请求指定 url
- jsp网上零食销售网站系统
- iOS不完美越狱手机doubleH3lix无法打开解决方法
- theano 全连接代码
- 高通芯片校准中的RGI、ICQ是什么意思,校准的特征化是什么意思?(转)
- Linux如何打开U盘
- springboot集成阿里云短信
- element-plus的el-date-picker中value-format属性失效以及只选择到时分值
- Cent OS安装中文字体
- R语言逻辑操作符:、|、!、||
- 单片机ch2o程序_基于单片机的甲醛浓度检测仪的设计_李娟娟
- Kafka 心跳机制 重复消费
- 10类人不适合睡前喝牛奶助眠
- XenCenter软件中的Centos7离线安装yum源,不用wget和crul
热门文章
- python模拟抛体运动_换个姿势学物理!用Python和Matplotlib进行模拟
- MyBatis配置文件出现错误,已解决(The content of element type )
- ruby dbi mysql_Ruby DBI Read 操作 | 菜鸟教程
- JAVA代码实现hive连接mysql_Java采用JDBC的方式连接Hive(SparkSQL)
- 20190813:(leetcode习题)加一
- 数据集 oracle,Analytics 数据集 - 
Oracle® ZFS Storage Appliance RESTful API 指南,发行版 OS8.6.0...
- sql server中的注释快捷键
- ArrayList<object> list 转org.json.JSONArray
- 50秒开门,3分钟开走,特斯拉Model S就这样不翼而飞
- 清华2018顶级数据团队建设全景报告发布:Python最受欢迎,C语言含金量最高