模板模式
模板設計模式創建了一個實施一組方法的抽象對象,子類通常將這個對象作為模板用於自己的設計。
設計場景
一般會用於數據庫抽象類。
代碼設計:
[php]
<?php
if (!defined('IS_INITPHP')) exit('Access Denied!');
/*********************************************************************************
* InitPHP 2.0 國產PHP開發框架 Dao-dbbase Driver DB基類
*-------------------------------------------------------------------------------
* 版權所有: CopyRight By initphp.com
* 您可以自由使用該源碼,但是在使用過程中,請保留作者信息。尊重他人勞動成果就是尊重自己
*-------------------------------------------------------------------------------
* $Author:zhuli
* $Dtime:2011-10-09
***********************************************************************************/
abstract class dbbaseInit{
/**
* 抽象數據庫鏈接
* @param string $host sql服務器
* @param string $user 數據庫用戶名
* @param string $password 數據庫登錄密碼
* @param string $database 數據庫
* @param string $charset 編碼
* @param string $pconnect 是否持久鏈接
*/
abstract protected function connect($host, $user, $password, $database, $charset = 'utf8', $pconnect = 0);
/**
* 抽象數據庫執行語句
* @param string $sql SQL語句
* @return obj
*/
abstract protected function query($sql);
/**
* 抽象數據庫-結果集中的行數
* @param $result 結果集
* @return array
*/
abstract protected function result($result, $num=1);
/**
* 抽象數據庫-從結果集中取得一行作為關聯數組
* @param $result 結果集
* @return array
*/
abstract protected function fetch_assoc($result);
/**
* 抽象數據庫-從結果集中取得列信息並作為對象返回
* @param $result 結果集
* @return array
*/
abstract protected function fetch_fields($result);
/**
* 抽象數據庫-前一次操作影響的記錄數
* @return int
*/
abstract protected function affected_rows();
/**
* 抽象數據庫-結果集中的行數
* @param $result 結果集
* @return int
*/
abstract protected function num_rows($result);
/**
* 抽象數據庫-結果集中的字段數量
* @param $result 結果集
* @return int
*/
abstract protected function num_fields($result);
/**
* 抽象數據庫-獲取上一INSERT的ID值
* @return Int
*/
abstract protected function insert_id();
/**
* 抽象數據庫-釋放結果內存
* @param obj $result 需要釋放的對象
*/
abstract protected function free_result($result);
/**
* 抽象數據庫鏈接關閉
* @param string $sql SQL語句
* @return obj
*/
abstract protected function close();
/**
* 錯誤信息
* @return string
*/
abstract protected function error();
}
<?php
if (!defined('IS_INITPHP')) exit('Access Denied!');
/*********************************************************************************
* InitPHP 2.0 國產PHP開發框架 Dao-mysqli 基類
*-------------------------------------------------------------------------------
* 版權所有: CopyRight By initphp.com
* 您可以自由使用該源碼,但是在使用過程中,請保留作者信息。尊重他人勞動成果就是尊重自己
*-------------------------------------------------------------------------------
* $Author:zhuli
* $Dtime:2011-10-09
***********************************************************************************/
class mysqliInit extends dbbaseInit{
public $link_id; //鏈接對象
/**
* MYSQL連接器
* @param string $host sql服務器
* @param string $user 數據庫用戶名
* @param string $password 數據庫登錄密碼
* @param string $database 數據庫
* @param string $charset 編碼
* @param string $pconnect 是否持久鏈接
* @return obj
*/
public function connect($host, $user, $password, $database, $charset = 'utf8', $pconnect = 0) {
$link_id = ($pconnect == 0) ? mysqli_connect($host, $user, $password) : mysqli_pconnect($host, $user, $password);
if (!$link_id) InitPHP::initError('mysql connect error!');
mysqli_query($link_id, 'SET NAMES ' . $charset);
if (!mysqli_select_db($link_id, $database)) InitPHP::initError('database is not exist!');
return $link_id;
}
/**
* SQL執行器
* @param string $sql SQL語句
* @return obj
*/
public function query($sql) {
return mysqli_query($this->link_id, $sql);
}
/**
* 結果集中的行數
* @param $result 結果集
* @return array
*/
public function result($result, $num=1) {
return mysqli_result($result, $num);
}
/**
* 從結果集中取得一行作為關聯數組
* @param $result 結果集
* @return array
*/
public function fetch_assoc($result) {
return mysqli_fetch_assoc($result);
}
/**
* 從結果集中取得列信息並作為對象返回
* @param $result 結果集
* @return array
*/
public function fetch_fields($result) {
return mysqli_fetch_field($result);
}
/**
* 結果集中的行數
* @param $result 結果集
* @return int
*/
public function num_rows($result) {
return mysqli_num_rows($result);
}
/**
* 結果集中的字段數量
* @param $result 結果集
* @return int
*/
public function num_fields($result) {
return mysqli_num_fields($result);
}
/**
* 釋放結果內存
* @param obj $result 需要釋放的對象
*/
public function free_result($result) {
return mysqli_free_result($result);
}
/**
* 獲取上一INSERT的ID值
* @return Int
*/
public function insert_id() {
return mysqli_insert_id($this->link_id);
}
/**
* 前一次操作影響的記錄數
* @return int
*/
public function affected_rows() {
return mysqli_affected_rows($this->link_id);
}
/**
* 關閉連接
* @return bool
*/
public function close() {
if ($this->link_id !== NULL) @mysqli_close($this->link_id);
$this->link_id = NULL;
return true;
}
/**
* 錯誤信息
* @return string
*/
public function error() {
return mysqli_error($this->link_id);
}
}
作者:initphp