0606-工厂模式、单例模式、DBDA的单例和完整功能
工厂模式:只要指定类名,就可以据此获取一个该类的对象。
单例模式:某个类,只允许其“创建”出一个对象。
单例的方法:三私一公(一个私有化对象,一个私有化构造方法,一个私有化克隆方法,一个公共方法返回对象)。
DBDA类的单例模式和完整功能:
<?php
//$db = new mysqli('localhost:3306','root','','per_position');
echo '<meta charset="utf-8">';
class DBDA{
//定义数据库链接参数
public $host = 'localhost';
public $user = 'root';
public $pwd = '';
public $database = 'per_position';
public $charset = 'utf8'; //数据库连接对象
public $db = null;
//DBDA对象
private static $link = null; //禁止构造:初始化数据
private function __construct($configArr=array()){
$this->host = isset($configArr['host']) ? $configArr['host'] : 'localhost';
$this->user = isset($configArr['user']) ? $configArr['user'] : 'root';
$this->pwd = isset($configArr['pwd']) ? $configArr['pwd'] : '';
$this->database = isset($configArr['database']) ? $configArr['database'] : 'per_position';
$this->charset = isset($configArr['charset']) ? $configArr['charset'] : 'utf8';
//链接数据库
$this->connect();
}
//禁止克隆
private function __clone(){}
//提供公有方法返回对象
static function getDb($config=array()){
if(!isset(self::$link)){
self::$link = new self($config);
}
return self::$link;
}
//链接数据库的方法
function connect(){
$this->db = new mysqli($this->host,$this->user,$this->pwd,$this->database);
!mysqli_connect_error() or die('连接失败');
$this->db->query('set names '.$this->charset);
}
//执行sql语句的方法
function query($sql){
$res = $this->db->query($sql);
if(!$res){
echo ("<br />执行失败。");
echo "<br />失败的sql语句为:" . $sql;
echo "<br />出错信息为:" . mysqli_error($this->db);
echo "<br />错误代号为:" . mysqli_errno($this->db);
die();
}
return $res;
}
//返回二维数组
function getAll($sql){
$res = $this->query($sql);
return $res->fetch_all();
}
//返回字符串
function getStr($sql){
$res = $this->query($sql);
$arr = $res->fetch_all();
$str = '';
foreach($arr as $v){
foreach($v as $vv){
$str .= $vv.",";
}
$str = substr($str,0,-1);
$str .= "^";
}
$str = substr($str,0,-1);
return $str;
}
//返回json
function getJson($sql){
$res = $this->query($sql);
$arr = $res->fetch_all();
return json_encode($arr);
}
//返回关联数组
function getAssoc($sql){
$res = $this->query($sql);
$arr = array();
while($row = $res->fetch_assoc()){
$arr[$row['department']]=$row;
}
return $arr;
}
}
//$config = array(
// //'database' => 'mysql'
//);
//$DBDA = new DBDA();
//var_dump($DBDA->getJson('select * from user'));
//看错误提示
//$DBDA->query('select * from 123');
//$res = $DBDA->db->query('select * from user');
//var_dump($res->fetch_all()); //禁用了构造方法,直接new会报错。
//$DBDA = DBDA::getDb();
//var_dump($DBDA);
//echo "<br>";
//$DBDA = DBDA::getDb();
//var_dump($DBDA);
DBDA类的单例模式和完整功能
<?php
include('DBDA.class.php');
$dbda = DBDA::getDb();
var_dump($dbda->getAll('select * from user'));
类的引用
0606-工厂模式、单例模式、DBDA的单例和完整功能的更多相关文章
- 瞎扯设计模式1:单例模式 饿汉模式 懒汉模式 线程安全的单例 singleton 设计模式 java
[原创声明]此文为本人原创,欢迎转载,转载请注明出处,作者链接~ http://www.cnblogs.com/m-yb/p/8833085.html 单例很常用,面试也经常被问,如:不用自定义锁怎么 ...
- 10.Java设计模式 工厂模式,单例模式
Java 之工厂方法和抽象工厂模式 1. 概念 工厂方法:一抽象产品类派生出多个具体产品类:一抽象工厂类派生出多个具体工厂类:每个具体工厂类只能创建一个具体产品类的实例. 即定义一个创建对象的接口(即 ...
- java设计模式—单例模式(包含单例的破坏)
什么是单例模式? 保证一个了类仅有一个实例,并提供一个访问它的全局访问点. 单例模式的应用场景? 网站的计数器,一般也是采用单例模式实现,否则难以同步: Web应用的配置对象的读取,一般也应用单例模式 ...
- JavaScript设计模式之单例模式【惰性单例】
在提高开发水平,往中高级前端工程师中,利用设计模式是必不可少的一条道路.掌握设计模式的思想远远比硬套重要,因为设计模式是一种思想,不局限于开发语言.但实际上由于语言的特性不同,往往在实现的时候会有不少 ...
- 02_javaSE面试题:单例设计模式
还记得很多年前,面试就让在白板上写个单例模式,当时技术渣渣,还写的是class A.面试官还说,你就不能写个Singleton. 面试题 编程题:写一个Singleton示例 解析 什么是Single ...
- java基础10 单例模式之饿汉式和懒汉式单例
前言: 软件行业中有23中设计模式 单例模式 模版模式 装饰者模式 观察者模式 工厂模式 ........... 单例模式 1. 单例模式包括 1.1 饿汉式单例 1.2 ...
- Java设计模式:Singleton(单例)模式
概念定义 Singleton(单例)模式是指在程序运行期间, 某些类只实例化一次,创建一个全局唯一对象.因此,单例类只能有一个实例,且必须自己创建自己的这个唯一实例,并对外提供访问该实例的方式. 单例 ...
- 设计模式(java) 单例模式 单例类
·单例类 单实例类,就是这个类只能创建一个对象,保证了对象实例的唯一性. 1.单例模式( Singleton Pattern) 是一个比较简单的模式, 其定义如下:Ensure a class has ...
- 创建类模式(五):单例(Singleton)
定义 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式一般情况下通过使用private的构造函数确保了在一个应用中只产生一个实例,并且是自行实例化. 和静态变量的区别 虽然 ...
随机推荐
- NOIP 2018 真・退役记
目录 NOIp 2018 真・退役记 7.01 7.05 \(summary\) 7.12 7.18 7.26 - 7.27 8.2 8.3 8.3 8.7 8.9 8.20 8.24 8.27 8. ...
- 转来的--轻松自动化---selenium-webdriver(python) (七)---定位iframe——转来的
本节知识点: 多层框架或窗口的定位: switch_to_frame() switch_to_window() 智能等待: implicitly_wait() 对于一个现代的web应用,经常会出现框架 ...
- Java基础学习总结(77)——Java枚举再总结
在Java SE5之前,我们要使用枚举类型时,通常会使用static final 定义一组int常量来标识,代码如下 public static final int MAN = 0; public s ...
- 设置mysql5.7远程连接-----------https://blog.csdn.net/qiyueqinglian/article/details/52778230
https://blog.csdn.net/qiyueqinglian/article/details/52778230 设置mysql5.7远程连接
- 2018.5.7每天一题面试题----final, finally, finalize 的区别
1.final修饰符(关键字).被final修饰的类,就意味着不能再派生出新的子类,不能作为父类而被子类继承. 因此一个类不能既被abstract声明,又被final声明.将变量或方法声明为final ...
- [luoguP3052] [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper(DP)
传送门 输出被阉割了. 只输出最少分的组数即可. f 数组为结构体 f[S].cnt 表示集合 S 最少的分组数 f[S].v 表示集合 S 最少分组数下当前组所用的最少容量 f[S] = min(f ...
- codevs3730 无线网络发射选址
题目描述 Description 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129条东西向街道和129条南北向街道所形 ...
- E - Super Jumping! Jumping! Jumping! DP
Nowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very popular in HDU. May ...
- 武大OJ 622. Symmetrical
Description Cyy likes something symmetrical, and Han Move likes something circular. Han Mov ...
- maven 本地配置
1.安装 配置环境变量 文件路径:C:\Program Files\apache-maven-3.3.9 2.本地文件配置 setting的配置 找到文件C:\Program Files\apache ...