单例模式与工厂模式 的mysql数据访问类

<?php

	//单例模式

	//定义类
	class Singleton{
		//静态属性:保存对象
		private static $obj;
		
		//杜绝一切可以产生多个新对象的方式
		private function __construct(){}
		private function __clone(){}

		//静态方法
		public static function getInstance(){
			//echo __FUNCTION__;

			//先判断对象是否存在
			//if(!is_object(self::$obj)){
			if(!self::$obj instanceof self){
				//创建对象
				self::$obj = new Singleton();
				//var_dump($obj);
			}

			//返回对象:return是返回值的意思,返回的是一个类的静态属性,静态属性中保存的是new的singleton的对象
			return self::$obj;
		}
	}

	//实例化
	//$s = new Singleton();					//new之后得到对象一定会调用构造方法

	//为变量$single赋值,右边是一个类:singleton调用自己的静态方法getInstance,将这个方法的返回值赋值给$single
	$single = Singleton::getInstance();
	var_dump($single);
	$single1 = Singleton::getInstance();
	var_dump($single1);

<pre name="code" class="php"><?php

	//PHP工厂模式

	//工厂类
	class Factory{

		/*
		 * 生产对象
		 * @param1 string $class,要得到的对象的类名
		 * @return object,对应类的对象
		*/
		public static function getInstance($class){
			//加载类
			if(self::autoload($class)){
				//存在类
				return new $class();
			}else{
				//不存在类
				return false;
			}
		}

		/*
		 * 加载类
		 * @param1 string $class,需要加载的类名
		 * @return 如果加载失败返回false
		*/
		private static function autoload($class){
			//判断文件是否存在:要指定路径
			if(is_file("{$class}.class.php")){
				//加载
				include_once "{$class}.class.php";
			}elseif(is_file("../20150109/{$class}.class.php")){
				include_once "../20150109/{$class}.class.php";
			}else{
				//加载失败
				return false;
			}

			//成功
			return true;
		}
	}

	//调用工厂类获取对象
	$db = Factory::getInstance('MyDB');
	var_dump($db);


 

今天根据书上的单例模式和参考其他CMS里面的数据库类,整理了一个自己用的mysql数据库访问类

<?php
class DbMySql
{
 private $db;
 private $dbName;
 static $instance;

 private function __construct($dbHost,$dbName,$dbUser,$dbPwd,$charset='utf8')
 {
       $this->db=mysql_connect($dbHost,$dbUser,$dbPwd) or die('Could not connect: '.mysql_error());
       $this->select_db($dbName);
    $this->query("SET NAMES $charset");

    }

 private function  __clone(){}

 public static function get_instance($dbHost,$dbName,$dbUser,$dbPwd,$charset)
 {
  if(!(self::$instance instanceof self))
  {
   self::$instance=new self($dbHost,$dbName,$dbUser,$dbPwd,$charset);
  }
  return self::$instance;
 }

    /**
 *查询表
 *返回一个一维数组
 */
 public function get_one($sql)
 {
  $query = $this->query($sql);
  $rs = $this->fetch_array($query);
  $this->free_result($query);
  return $rs ;
 }

   /**
 *查询表
 *返回一个二维数组
 */
 public function select($sql, $keyfield = '')
 {
  $array = array();
  $result = $this->query($sql);
  while($r = $this->fetch_array($result))
  {
   if($keyfield)
   {
    $key = $r[$keyfield];
    $array[$key] = $r;
   }
   else
   {
    $array[] = $r;
   }
  }
  $this->free_result($result);
  return $array;
    }

    /**
 *修改数据
 *@param tableName 操作的表
 *@param array 信息数组
 *@param where 条件
 */
 function update($tableName,$array,$where = '')
 {
  if($where)
  {
   $sql = '';
   foreach($array as $k=>$v)
   {
    $sql .= ", `$k`='$v'";
   }
   $sql = substr($sql, 1);
   $sql = "UPDATE $tablename SET $sql WHERE $where";
  }
  else
  {
   $sql = "REPLACE INTO $tablename(`".implode('`,`', array_keys($array))."`) VALUES('".implode("','", $array)."')";
  }
  return $this->query($sql);
 }

  /**
 *添加数据
 *@param tableName 操作的表
 *@param array 信息数组
 *return int 信息id
 */
 function insert($tableName, $array)
 {
  $this->query("INSERT INTO $tableName(`".implode('`,`', array_keys($array))."`) VALUES('".implode("','", $array)."')");
  return $this->insert_id();
 }

    public function query($sql)
 {
  return mysql_query($sql,$this->db);
 }

 public function fetch_array($query, $result_type = MYSQL_ASSOC)
 {
  return mysql_fetch_array($query, $result_type);
 }

 public function select_db($dbName)
 {
     mysql_select_db($dbName , $this->db) or die('Could not select database');
  $this->dbName =$dbName;
 }

 public function close()
 {
  return mysql_close($this->db);
 }

 public function free_result(&$query)
 {
  return mysql_free_result($query);
 }

 public function insert_id()
 {
  return mysql_insert_id($this->db);
 }

 public function fetch_row($query)
 {
  return mysql_fetch_row($query);
 }
 
 public function affected_rows()
 {
  return mysql_affected_rows($this->db);
 }

 public function num_rows($query)
 {
  return mysql_num_rows($query);
 }
}
?>

使用方法

$db=DbMySql::get_instance('localhost','linji','root','12345678','utf8');

放在博客以便以后自己使用。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值