php 设计模式之 工厂模式

本人常用mysql数据库,所以程序只写了mysql的数据库操作类。希望各位高手把另外的类写全,最好能发一份给我。
db_mysql.php继承db.php接口,具体实现数据库操作的各种方法 ,如果你确定你的数据库平台不会变的话不用工厂类,直接用这个就行了。


代码如下:

<?php
/**
* @author 黄建文
* @version V1.0
* @email hjwtp2005@qq.com
* @data 2008-12-16
* ==================================================================
* @example
* include 'db_mysql.php';
* $db=new db_mysql('localhost','root','admin','emtit');
* $sqlstr="SELECT * FROM member WHERE memberid=1";
* var_dump($db->get_one($sqlstr));
* ===================================================================
*/
include 'db.php';
class db_mysql implements db {

private $connid;

public function db_mysql($dbhost,$username,$passowrd,$dbname='',$dbcharset='utf8'){
$this->connid=mysql_connect($dbhost,$username,$passowrd);
if (!$this->connid){
$this->halt('Can not connect to MySQL server');
}
if (emptyempty($dbcharset)){
$dbcharset='utf8';
}
// 当mysql版本为4.1以上时,启用数据库字符集设置
if($this->version() > '4.1' && $dbcharset)
{
mysql_query("SET NAMES '".$dbcharset."'" , $this->connid);
}
// 当mysql版本为5.0以上时,设置sql mode
if($this->version() > '5.0')
{
mysql_query("SET sql_mode=''" , $this->connid);
}
if (!emptyempty($dbname)){
$this->select_db($dbname);
}

}
/**
* 选择数据库
*
* @param unknown_type $dbname
*/
public function select_db($dbname){
mysql_select_db($dbname,$this->connid);

}
/**
* 执行SQL语句
*
* @param unknown_type $sqlstr
*/
public function query($sqlstr){
$query=mysql_query($sqlstr,$this->connid);
if (!$query){
$this->halt('MySQL Query Error', $sqlstr);
}
return $query;
}
/**
* 取得一条查询记录
*
* @return unknown
*/
public function get_one($sqlstr){
$query=$this->query($sqlstr);
$rs = $this->fetch_array($query);
$this->free_result($query);
return $rs ;
}
/**
* 从结果集中取得一行作为关联数组
* @param resource 数据库查询结果资源
* @param string 定义返回类型
* @return array
*/
public function fetch_array($query, $result_type = MYSQL_ASSOC)
{
return mysql_fetch_array($query, $result_type);
}

/**
* 取得前一次 MySQL 操作所影响的记录行数
* @return int
*/
public function affected_rows()
{
return mysql_affected_rows($this->connid);
}
/**
* 取得结果集中行的数目
* @return int
*/
public function num_rows($query)
{
return mysql_num_rows($query);
}

/**
* 返回结果集中字段的数目
* @return int
*/
public function num_fields($query)
{
return mysql_num_fields($query);
}

/**
* 释放结果内存
*
* @param unknown_type $query
* @return bool
*/
public function free_result($query)
{
return mysql_free_result($query);
}
/**
* 取得上一步 INSERT 操作产生的 ID
* @return int
*/
public function insert_id()
{
return mysql_insert_id($this->connid);
}

/**
* 取得 MySQL 服务器信息
*
* @return string
*/
public function version()
{
return mysql_get_server_info($this->connid);
}
/**
* 关闭MYSQL连接
*
* @return bool
*/
public function close()
{
return mysql_close($this->connid);
}
/**
* 返回错误字符串
*
* @return string
*/ private function error(){
return @mysql_error($this->connid);
}
/**
* 返回错误号
*
* @return int
*/
private function errno(){
return intval(@mysql_errno($this->connid)) ;
}
/**
* 输出出错信息
*
* @param string $message
* @param string $sql
*/
private function halt($message = '', $sql = ''){
exit("MySQL Query:$sql <br> MySQL Error:".$this->error()." <br> MySQL Errno:".$this->errno()." <br> Message:$message");
}
}
?>

db.php数据库操作接口,定义数据库操作的方法.


代码如下:

<?php
interface db {

function select_db($dbname);//选择数据库
function query($sqlstr);//执行sql语句
function get_one($sqlstr);//执行sql语句,只得到一条记录
function fetch_array($query);//从结果集中取得一行作为关联数组
function affected_rows();//返回操作所影响的记录行数
function num_rows($query);//取得结果集中行的数目
function num_fields($query);//返回结果集中字段的数目
function free_result($query);//释放资源
function insert_id();//返回上一次插入记录的ID;
function version();//数据库版本
function close();//关闭数据库连接
}
?>

db_factory.php数据库工厂类,要实现数据库平台更方便一定要使用这个类


代码如下:

<?php
/**
* @author 黄建文
* @version v1.0
* @email hjwtp2005@qq.com
* @example
* $db=db_factcory::create('MYSQL','localhost','root','admin','emtit');
* $sqlstr="SELECT * FROM member WHERE memberid=1";
* $db->get_one($sqlstr);
*/
include 'db_mysql.php';
class db_factory {
function db_factory() {
}
static function create($type,$dbhost,$username,$password,$dbname='',$dbcharset=''){
switch ($type){
case 'MYSQL':
return new db_mysql($dbhost,$username,$password,$dbname,$dbcharset);
case 'SQLSERVER':
return new db_sqlserver($dbhost,$username,$password,$dbname,$dbcharset);
case 'ACCESS':
return new db_access($dbhost,$username,$password,$dbname,$dbcharset);
case 'ORACLE':
return new db_oracle($dbhost,$username,$password,$dbname,$dbcharset);
}
return false;
}
function __destruct() {
}
}
?>

(0)

相关推荐

  • php设计模式之简单工厂模式详解

    本文以实例形式较为详细的介绍了PHP设计模式的简单工厂模式,对于进行PHP程序设计来说有很好的借鉴作用.具体如下: 一.概念 简单工厂模式 [静态工厂方法模式](Static Factory Method) 是类的创建模式 工厂模式的几种形态: 1.简单工厂模式(Simple Factory)又叫做 静态工厂方法模式(Static Factory Method) 2.工厂方法模式(Factory Method)又叫做 多态性工厂模式(Polymorphic Factory) 3.抽象工厂模式(A

  • 学习php设计模式 php实现工厂模式(factory)

    一.意图 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使用一个类的实例化延迟到其子类[GOF95] 二.工厂模式结构图 三.工厂模式中主要角色 抽象产品(Product)角色:具体产品对象共有的父类或接口 具体产品(Concrete Product)角色:实现抽象产品角色所定义的接口,并且工厂方法模式所创建的每一个对象都是某具体产品对象的实例 抽象工厂(Creator)角色:模式中任何创建对象的工厂类都要实现这个接口,它声明了工厂方法,该方法返回一个Prod

  • PHP设计模式之工厂模式与单例模式

    本文实例讲述了PHP设计模式之工厂模式与单例模式实现方法.分享给大家供大家参考,具体如下: 设计模式简单说应对某类问题而设计的解决方式 工厂模式:应对需求创建相应的对象 class factory{ function __construct($name){ if(file_exists('./'.$name.'.class.php')){ return new $name; }else{ die('not exist'); } } } 单例模式:只创建一个对象的实例,不允许再创建实例,节约资源(

  • PHP设计模式之工厂模式详解

    在开发大型系统时,往往会出现这样一种情况: 我有一部分基础数据,是类classA是从数据库A读取出来的,其他很多的功能都是基于这个基础数据来操作的.现在呢,我想把数据从数据库A变成从另外的数据源去获取,这时候,要修改起来就比较麻烦,要修改其他很多类的代码.这种设计显然是不够灵活的,换句话说,就是紧耦合的,那么什么是紧耦合呢?紧耦合就是指系统中某个部分的函数或类严重依赖于系统的其他部分中的函数或类的行为和结构. 这时,工厂模式的作用性就体现出来了. 工厂模式  就是解决这样的一些情况的设计方法.

  • php基础设计模式大全(注册树模式、工厂模式、单列模式)

    废话不多说了,先给大家介绍注册树模式然后介绍工厂模式最后给大家介绍单列模式,本文写的很详细,一起来学习吧. php注册树模式 什么是注册树模式? 注册树模式当然也叫注册模式,注册器模式.之所以我在这里矫情一下它的名称,是因为我感觉注册树这个名称更容易让人理解.像前两篇一样,我们这篇依旧是从名字入手.注册树模式通过将对象实例注册到一棵全局的对象树上,需要的时候从对象树上采摘的模式设计方法.   这让我想起了小时候买糖葫芦,卖糖葫芦的将糖葫芦插在一个大的杆子上,人们买的时候就取下来.不同的是,注册树

  • PHP实现设计模式中的抽象工厂模式详解

    抽象工厂模式(Abstact Factory)是一种常见的软件设计模式.该模式为一个产品族提供了统一的创建接口.当需要这个产品族的某一系列的时候,可以为此系列的产品族创建一个 具体的工厂类. [意图] 抽象工厂模式提供一个创建一系统相关或相互依赖对象的接口,而无需指定它们具体的类[GOF95] [抽象工厂模式结构图] [抽象工厂模式中主要角色] 抽象工厂(Abstract Factory)角色:它声明一个创建抽象产品对象的接口.通常以接口或抽象类实现,所有的具体工厂类必须实现这个接口或继承这个类

  • 介绍php设计模式中的工厂模式

    问题 你如何能轻松方便地建立这么" 复杂 " 的对象即操作中不需要粘贴复制呢? 解决方法 建立一个工厂(一个函数或一个类方法)来制造新的对象.为了理解工厂的用处, 试想以下的不同之处-- 代码: 复制代码 代码如下: $connection =& new MySqlConnection($user, $password, $database); --使你的代码可扩展和更简洁-- 复制代码 代码如下: $connection =& create_connection();

  • 基于php设计模式中工厂模式详细介绍

    工厂模式:由工厂类根据参数来决定创建出哪一种产片类的实例工厂类:一个专门用来创建其他对象的方法类.即按需分配,传入参数进行选择,返回具体的类作用:对象创建的封装.简化创建对象的操作,即调用工厂类的一个方法来得到需要的类补充:1.主要角色:抽象产品(Product).具体产品(Concrete Product).抽象工厂角色(Creator)2.优缺点    优点:工厂方法模式可以允许系统在不修改工厂角色的情况下引进心产品    缺点:客户可能仅仅为了创建一个特定的Concrete Product

  • php设计模式 Factory(工厂模式)

    复制代码 代码如下: <?php /** * 工厂方法模式 * * 定义一个用于创建对象的接口,让子类决定将哪一个类实例化,使用一个类的实例化延迟到其子类 */ /* class DBFactory { public static function create($type) { swtich($type) { case "Mysql": return new MysqlDB(); break; case "Postgre": return new Postg

  • PHP最常用的2种设计模式工厂模式和单例模式介绍

    1.工厂模式 主要作用是降低耦合度. 复制代码 代码如下: abstract class Operation{ abstract public function getValue($num1,$num2); public function getAttr(){ return 1; } } class Add extends Operation{ public function getValue($num1, $num2){ return $num1+$num2; } } class Sub ex

随机推荐