研究php单例模式实现数据库类
实现单例模式:单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。
单例模式的逻辑:类里面声明一个静态的方法和变量,静态变量用来存储唯一的实例,静态方法作为类向外的唯一的接口,并在里面做判断,当静态变量有实例时候直接返回,没有则new一个实例赋值在静态变量里面。构造函数里面放链接数据库的操作,因为静态方法中实现了控制了只实例化一次,所以达到只链接数据库一次。在类外部访问静态方法;
简单类如下:
class Con_db{
private static $dbObj = null;
private $con;
private $result;
private $row;
private $newsItem;
/**
* 构造函数
* @param [type] $host [数据库地址]
* @param [type] $username [数据库名称]
* @param [type] $psw [数据库密码]
* @param [type] $database [数据库]
*/
private function __construct($host,$username,$psw,$database){
$this->con = mysql_connect($host,$username,$psw);
if(!$this->con){
die("链接失败");
}
mysql_set_charset("utf-8");
mysql_select_db($database);
}
/**
* 获取一次性对象
* @return 实例对象
*/
public static function getInstance($host,$username,$psw,$database){
if(is_null(self::$dbObj)){
self::$dbObj = new self($host,$username,$psw,$database);
}
return self::$dbObj;
}
/**
* 数据库查询语句
*/
private function query($sql){
if($sql){
$this->result = mysql_query($sql);
if($this->result && mysql_num_rows($this->result)){
return $this->result;
}else{
return false;
}
}else{
die("必须填写查询语句!");
}
}
/**
* 查询多条语句
* @param $sql 查询语句
* return string;
*/
private function getAll($sql){
$this->result = mysql_query($sql);
if($this->result && mysql_num_rows($this->result)){
$this->newsItem = array();
while($this->row = mysql_fetch_assoc($this->result)){
$this->newsItem[] = $this->row;
}
}
return $this->newsItem;
}
/**
* 查询一条语句
* @param $sql 查询语句
* return string;
*/
private function getone($sql){
$this->result = mysql_query($sql);
if($this->result && mysql_num_rows($this->result)){
return $this->row = mysql_fetch_assoc($this->result);
}
}
}
$db = Con_db::getInstance("localhost","root","root","szwengdo_com");
$sql = "select * from wd_cases";
$row = $db->getone($sql);
var_dump($row);
第一次研究,希望改正!!
研究php单例模式实现数据库类的更多相关文章
- PHP用单例模式实现一个数据库类
使用单例模式的出发点: 1.php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源. 2.如果系统中需要有一个类来全局控制某些 ...
- 设计模式 - 单例模式mysql数据库操作类
待续... index.php 调用方法: <?php header('Content-Type:text/html; charset=utf8'); require 'instance.php ...
- Dedesql数据库类详解
今天花点时间讲解下织梦的sql数据库类,近期本来是准备录制一套视频教程的,但由于视频压缩的问题迟迟没有开展工作,如果大家有什么好的视频压缩方式可以通过邮件的方式告诉我:tianya#dedecms.c ...
- 孤荷凌寒自学python第四十九天继续研究跨不同类型数据库的通用数据表操作函数
孤荷凌寒自学python第四十九天继续研究跨不同类型数据库的通用数据表操作函数 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 不同类型 ...
- PHP基于单例模式编写PDO类的方法
一.单例模式简介 简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务: 二.为什么要使用PHP单例模式? 1.php的应用主要在于数据库应用, 所以一个应用中会存在 ...
- Dedesql数据库类详解(二次开发必备教程)
其实数据库类织梦之前就有一个介绍,http://help.dedecms.com/v53/archives/functions/db/,这篇文章讲解了数据库类的一些常见的使用方法,不过没有结合例子去介 ...
- phpcms 源码分析四: 数据库类实现
这次是逆雪寒的数据库类分析: <?php /* 这个讲 phpcms 的数据库类 和 phpcms 的文本缓存的实现.看了看 都是很简单的东西.大家看着我注释慢慢看吧.慢慢理解,最好能装了PHP ...
- php备份数据库类分享
本文实例讲述了php实现MySQL数据库备份类.分享给大家供大家参考.具体分析如下:这是一个非常简单的利用php来备份mysql数据库的类文件,我们只要简单的配置好连接地址用户名与数据库即可 ph ...
- Python一个简单的数据库类封装
#encoding:utf-8 #name:mod_db.py '''使用方法:1.在主程序中先实例化DB Mysql数据库操作类. 2.使用方法:db=database() db.fet ...
随机推荐
- 好工具 VHD
通过powershell 互转 Convert-VHD –Path F:\debian.vhdx –DestinationPath F:\debian.vhd 举个栗子 附加参考 Convert-VH ...
- Android——Activity恢复用户用EditText输入的数据
说明: 在横屏输入的内容,在Activity销毁后,即横屏后,获取用户输入的内容 步骤: 1.在xml页面定义EditText的id 2.用onSaveInstanceState保存用户输入的数据 ( ...
- 原生Orcale数据库连接
package tj.test.demo; import java.sql.Connection;import java.sql.DriverManager;import java.sql.Prepa ...
- 从此sudo不再输密码
#sudo visudo 最后一次输入密码. 在最后一行加入: xxx ALL=NOPASSWD: ALL xxx即为你当前使用的用户名,Ctrl+X,保存退出. 从此告别每次都要输密码的时代.
- ActionContextCleanUp
ActionContextCleanUp作用 延长action中属性的生命周期,包括自定义属性,以便在jsp页面中进行访问,让actionContextcleanup过滤器来清除属性,不让acti ...
- HDU1717--小数化分数2
这道题是将输入的小数(有可能是无限循环小数)来化为分数.刚開始看到以为枚举(千万不要嘲笑我),可是感觉不正确. 所以百度了小数化为分数的方法,然后看到了各种方法,原来是这这样,在这我採用的是小数化为分 ...
- PHP字符串截取操作大全
1. 截取GB2312中文字符串 <?php header("content-type:text/html;charset=gb2312"); // echo "a ...
- hdu 1756:Cupid's Arrow(计算几何,判断点在多边形内)
Cupid's Arrow Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- ajax 请求登录超时跳转登录页的示例代码
Ajax AJAX即“Asynchronous Javascript + XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. 在Filter里判断是否登录,如果未 ...
- Object Slicing in C++
In C++, a derived class object can be assigned to base class, but the other way is not possible. cla ...