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的构造函数确保了在一个应用中只产生一个实例,并且是自行实例化. 和静态变量的区别 虽然 ...
随机推荐
- 个人Linux(ubuntu)使用记录——更换软件源
说明:记录自己的linux使用过程,并不打算把它当作一个教程,仅仅只是记录下自己使用过程中的一些命令,配置等东西,这样方便自己查阅,也就不用到处去网上搜索了,所以文章毫无章法可言,甚至会记录得很乱 s ...
- python3虚拟环境应用
python3自带虚拟环境venv,大致操作只有三步 1. 创建虚拟环境 python3 -m venv venv(名称随意) 2. 激活虚拟环境 source venv/bin/activate 3 ...
- Java Web学习总结(29)——Java Web中的Filter和Interceptor比较
1. 背景 在设计web应用的时候,用户登录/注册是必不可少的功能,对用户登录信息进行验证的方法也是多种多样,大致可以认为如下模式:前端验证+后台验证.根据笔者的经验,一般会在前端进行一些例如是否输入 ...
- CodeForces 1000F One Occurrence
You are given an array $a$ consisting of $n$ integers, and $q$ queries to it. $i$-th query is denote ...
- 转载 - Python里面关于 模块 和 包 和 __init__.py 的一些事
出处:http://www.cnblogs.com/tqsummer/archive/2011/01/24/1943273.html python中的Module是比较重要的概念.常见的情况是,事先写 ...
- 20170613NOIP模拟赛
共3道题目,时间3小时 题目非原创,仅限校内交流使用 题目名称 Graph Incr Permutation 文件名 graph incr permutation 输入文件 graph.in incr ...
- [Usaco2016 Open]Diamond Collector
题目描述 Bessie the cow, always a fan of shiny objects, has taken up a hobby of mining diamonds in her s ...
- [NOIP2004]FBI树
题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串. FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三 ...
- Linux 使用pwgen命令创建随机密码
https://blog.csdn.net/fdipzone/article/details/73864598 http://www.netkou.com/?post=155
- erlang二进制数据垃圾回收机制
erlang二进制数据在内存中有两种存在形式,当数据大小不到 64 bytes,就直接存在进程堆内.假设超过了64 bytes.就被保存到进程外的共享堆里,能够给节点内全部进程共享. erlang有两 ...