<?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_on
{
$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');
放在博客以便以后自己使用。