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

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

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

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'));

类的引用

最新文章

  1. Linux快速配置集群ssh互信
  2. PHPCMS v9 超级安全防范教程!
  3. Web端测试和移动端测试的区别
  4. 避免硬编码你的PostgreSQL数据库密码
  5. 《JS高程》数据类型学习笔记
  6. 做权限树时 使用EasyUI中Tree
  7. 转:java两个jre目录和三个lib目录
  8. Bzoj 1657: [Usaco2006 Mar]Mooo 奶牛的歌声 单调栈
  9. 删除 win8.1中的网络1,网络2,宽带连接1,宽带连接2等网络记录
  10. 简述 Hibernate 和 JDBC 的区别、优缺点
  11. Duilib第一步(III)-知识进阶
  12. markdown用法
  13. ubantu 14.04中安装npm+node.js+react antd
  14. EntityFramework Code-First 简易教程(八)-------一对一
  15. for(var i=1;i&lt;=3;i++){ setTimeout(function(){ console.log(i); },0); };答案:4 4 4。
  16. will not be exported or published. Runtime ClassNotFoundExceptions may result.
  17. system表空间空间不足解决办法
  18. table中怎么设置两行间距
  19. 通过tarball形式安装HBASE Cluster(CDH5.0.2)——HBASE 真分布式集群配置
  20. Java项目经验——程序员成长的钥匙

热门文章

  1. python多进程和多线程编程
  2. Stuts2学习——HelloWorld
  3. 1002 A+B for Polynomials (PAT (Advanced Level) Practice)
  4. 使用Postman Interceptor发送带cookie的请求一直loading的解决法案
  5. Spring 获取当前activeProfile
  6. Android StatusBarUtil:设置Android系统下方虚拟键键盘透明度
  7. Android第三方开源SeekBarCompat:音乐类播放器等APP进度条常用
  8. 个人常用git命令
  9. 【BZOJ4514】数字配对(费用流)
  10. 【待续】海思Hi3520A学习笔记