本文實例講述了PHP基于單例模式實現(xiàn)的數(shù)據(jù)庫操作基類。分享給大家供大家參考,具體如下:
成都創(chuàng)新互聯(lián)公司專注于江北企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城開發(fā)。江北網(wǎng)站建設(shè)公司,為江北等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站設(shè)計,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
配置文件:
?php
$db
=
array(
'host'='localhost',
'user'='root',
'password'='',
'database'='test',
)
?
php
數(shù)據(jù)庫基類:
?php
class
db
{
public
$conn;
public
static
$sql;
public
static
$instance=null;
private
function
__construct(){
require_once('db.config.php');
$this-conn
=
mysql_connect($db['host'],$db['user'],$db['password']);
if(!mysql_select_db($db['database'],$this-conn)){
echo
"失敗";
};
mysql_query('set
names
utf8',$this-conn);
}
public
static
function
getInstance(){
if(is_null(self::$instance)){
self::$instance
=
new
db;
}
return
self::$instance;
}
/**
*
查詢數(shù)據(jù)庫
*/
public
function
select($table,$condition=array(),$field
=
array()){
$where='';
if(!empty($condition)){
foreach($condition
as
$k=$v){
$where.=$k."='".$v."'
and
";
}
$where='where
'.$where
.'1=1';
}
$fieldstr
=
'';
if(!empty($field)){
foreach($field
as
$k=$v){
$fieldstr.=
$v.',';
}
$fieldstr
=
rtrim($fieldstr,',');
}else{
$fieldstr
=
'*';
}
self::$sql
=
"select
{$fieldstr}
from
{$table}
{$where}";
$result=mysql_query(self::$sql,$this-conn);
$resuleRow
=
array();
$i
=
0;
while($row=mysql_fetch_assoc($result)){
foreach($row
as
$k=$v){
$resuleRow[$i][$k]
=
$v;
}
$i++;
}
return
$resuleRow;
}
/**
*
添加一條記錄
*/
public
function
insert($table,$data){
$values
=
'';
$datas
=
'';
foreach($data
as
$k=$v){
$values.=$k.',';
$datas.="'$v'".',';
}
$values
=
rtrim($values,',');
$datas
=
rtrim($datas,',');
self::$sql
=
"INSERT
INTO
{$table}
({$values})
VALUES
({$datas})";
if(mysql_query(self::$sql)){
return
mysql_insert_id();
}else{
return
false;
};
}
/**
*
修改一條記錄
*/
public
function
update($table,$data,$condition=array()){
$where='';
if(!empty($condition)){
foreach($condition
as
$k=$v){
$where.=$k."='".$v."'
and
";
}
$where='where
'.$where
.'1=1';
}
$updatastr
=
'';
if(!empty($data)){
foreach($data
as
$k=$v){
$updatastr.=
$k."='".$v."',";
}
$updatastr
=
'set
'.rtrim($updatastr,',');
}
self::$sql
=
"update
{$table}
{$updatastr}
{$where}";
return
mysql_query(self::$sql);
}
/**
*
刪除記錄
*/
public
function
delete($table,$condition){
$where='';
if(!empty($condition)){
foreach($condition
as
$k=$v){
$where.=$k."='".$v."'
and
";
}
$where='where
'.$where
.'1=1';
}
self::$sql
=
"delete
from
{$table}
{$where}";
return
mysql_query(self::$sql);
}
public
static
function
getLastSql(){
echo
self::$sql;
}
}
$db
=
db::getInstance();
//$list
=
$db-select('demo',array('name'='tom','password'='ds'),array('name','password'));
//echo
$db-insert('demo',array('name'='腳本之家','password'='123'));
//echo
$db-update('demo',array("name"='xxx',"password"='123'),array('id'=1));
echo
$db-delete('demo',array('id'='2'));
db::getLastSql();
echo
"pre";
?
更多關(guān)于PHP操作數(shù)據(jù)庫相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php+mysql數(shù)據(jù)庫操作入門教程》、《PHP基于pdo操作數(shù)據(jù)庫技巧總結(jié)》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
單例模式
:使得類的一個對象成為系統(tǒng)中的唯一實例.
PHP中使用單例模式最常見的就是數(shù)據(jù)庫操作了。避免在系統(tǒng)中有多個連接數(shù)據(jù)庫的操作,浪費系統(tǒng)資源的現(xiàn)象,就可以使用單例模式。每次對數(shù)據(jù)庫操作都使用一個實例。
簡單示例
class
AClass
{
//
用來存儲自己實例
public
static
$instance;
//
私有化構(gòu)造函數(shù),防止外界實例化對象
private
function
__construct()
{}
//
私有化克隆函數(shù),防止外界克隆對象
private
function
__clone()
{}
//
靜態(tài)方法,單例訪問統(tǒng)一入口
public
static
function
getInstance()
{
if
(!(self::$instance
instanceof
self)){
self::$instance
=
new
self();
}
return
self::$instance;
}
//
test
public
function
test()
{
return
"done";
}
//
私有化克隆函數(shù),防止外界克隆對象
private
function
__clone()
{}
}
class
BClass
extends
AClass{
}
//
獲取實例
$aclass
=
AClass::getInstance();
$bclass
=
BClass::getInstance();
//
調(diào)用方法
echo
$aclass-test();
對一些比較大型的應(yīng)用來說,可能連接多個數(shù)據(jù)庫,那么不同的數(shù)據(jù)庫公用一個對象可能會產(chǎn)生問題,比如連接句柄的分配等,我們可以通過給$instance變成數(shù)組,通過不同的參數(shù)來控制
簡單示例
class
DB
{
//
用來存儲自己實例
public
static
$instance
=
array();
public
$conn;
//
私有化構(gòu)造函數(shù),防止外界實例化對象
private
function
__construct($host,
$username,
$password,
$dbname,
$port)
{
$this-conn
=
new
mysqli($host,
$username,
$password,
$dbname,
$port);
}
//
靜態(tài)方法,單例訪問統(tǒng)一入口
public
static
function
getInstance($host,
$username,
$password,
$dbname,
$port)
{
$key
=
$host.":".$port;
if
(!(self::$instance[$key]
instanceof
self)){
self::$instance[$key]
=
new
self($host,
$username,
$password,
$dbname,
$port);#實例化
}
return
self::$instance[$key];
}
//query
public
function
query($ql)
{
return
$this-conn-query($sql);
}
//
私有化克隆函數(shù),防止外界克隆對象
private
function
__clone()
{}
//釋放資源
public
function
__destruct(){
$this-conn-close();
}
}
搭建好php開發(fā)環(huán)境,這個就不多講了,能找單例模式的應(yīng)該有一定的php基礎(chǔ)
2
新建一個database.php文件存放數(shù)據(jù)庫信息
?php
$db = array(
'host'='localhost',//地址
'user'='root',//數(shù)據(jù)庫用戶名
'password'='root',//數(shù)據(jù)庫密碼
'database'='ceshi',//數(shù)據(jù)庫名
)
?
3
新建Mysql.class.php編寫數(shù)據(jù)庫連接類操作類添加需要的屬性和構(gòu)造方法
構(gòu)造函數(shù)加載數(shù)據(jù)庫配置文件連接數(shù)據(jù)庫
?php
class db {
public $conn;
public static $sql;
public static $instance=null;
private function __construct(){
require_once('database.php');
$this-conn = mysqli_connect($db['host'],$db['user'],$db['password']);
if(!mysqli_select_db($this-conn,$db['database'])){
echo "失敗";
};
mysqli_query($this-conn,'set names utf8');
}
}
?這樣試試吧如果你對php這類有興趣的話,可以和我一樣在后盾人經(jīng)??纯唇滩?,自己多看幾遍,慢慢的以后就明白了,希望能幫到你,給個采納吧謝謝