PHP面向?qū)ο笾聞?wù)腳本模式(詳解)
如下所示:
/*
事務(wù)腳本模式: 類(lèi)似于thinkphp中的model層,或者說(shuō)就是操作數(shù)據(jù)庫(kù)的類(lèi)。
個(gè)人覺(jué)得實(shí)踐中使用起來(lái)還是挺簡(jiǎn)單方便的,就是SQL語(yǔ)句寫(xiě)死了的話(huà),靈活性就不夠。
示例代碼如下:
*/
namespace woo\process;
abstract class Base{
static $DB; //pdo對(duì)象
static $stmts = array(); //sql語(yǔ)句句柄
function __construct (){
$dsn = \woo\base\ApplicationRegistry::getDSN();
if(is_null($dsn)){
throw new \woo\base\AppException("No DSN");
}
self::$DB = new PDO($dsn);
self::$DB->setAttribute(\PDO::ATTR_ERRMODE,\PDO::ERRMODE_EXCEPTION);
}
function prepareStatement($stmt_s){ //緩存sql語(yǔ)句句柄
if(isset(self::$stmts($stmt_s)){
return self::$stmts[$stmt_s];
}
$stmt_handle = self::$DB->prepare($stmt_s);
self::$stmts[$stmt_s] = $stmt_handle;
return $stmt_handle;
}
protected function doStatement($stmt_s,$values_a){ //執(zhí)行sql并獲取一個(gè)語(yǔ)句資源
$sth = $this->prepareStatement($stmt_s);
$sth->closeCursor();
$db_result = $sth->execute($values_a);
return $sth;
}
}
//這個(gè)類(lèi)就是向數(shù)據(jù)庫(kù)中寫(xiě)入一些數(shù)據(jù),比較簡(jiǎn)單沒(méi)什么好多說(shuō)的
class VenueManager extends Base{
static $add_venue = "INSERT INTO venue (name) values(?)";
static $add_space = "INSERT INTO space (name,venue) values(?,?)";
static $check_slot = "SELECT id,name FROM event WHERE space = ? AND (start+duration)>? AND start <?";
static $add_event = "INSERT INTO event (name,space,start,duration) values(?,?,?,?)";
function addVenue($name,$space_array){
$ret = array();
$ret['venue'] = array($name);
$this->doStatement(self::$add_venue,$ret['venue']);
$v_id = self::$DB->lastInsertId();
$ret['spaces'] = array();
foreach($space_array as $space_name){
$values = array($space_name,$v_id);
$this->doStatement(self::$add_space,$values);
$s_id = self::$DB->lastInsertId();
array_unshift($values,$s_id);
$ret['spaces'][] = $values;
}
return $ret;
}
function bookEvent ($space_id,$name,$time,$duration){
$values = array($space_id,$time,($time+$duration));
$stmt = $this->doStatement(self::$check_slot,$values,false);
if($result = $stmt->fetch()){
throw new \woo\base\AppException("double booked! try again");
}
$this->doStatement(self::$add_event,array($name,$space_id,$time,$duration));
}
}
//客戶(hù)端,使用起來(lái)還是比較簡(jiǎn)便的
$venue = new VenueManager();
$venue->addVenue('test',array('test1','test2','test3'));
以上這篇PHP面向?qū)ο笾聞?wù)腳本模式(詳解)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于擴(kuò)展 Laravel 默認(rèn) Session 中間件導(dǎo)致的 Session 寫(xiě)入失效問(wèn)題分析
這篇文章主要介紹了關(guān)于擴(kuò)展 Laravel 默認(rèn) Session 中間件導(dǎo)致的 Session 寫(xiě)入失效問(wèn)題分析的相關(guān)資料,需要的朋友可以參考下2016-01-01
一波PHP中cURL庫(kù)的常見(jiàn)用法代碼示例
這篇文章主要介紹了一波PHP中cURL庫(kù)的常見(jiàn)用法代碼示例,類(lèi)Unix世界的cURL內(nèi)置于PHP中,使Linux和Mac OS用戶(hù)倍感親切,需要的朋友可以參考下2016-05-05
PHP 獲取客戶(hù)端 IP 地址的方法實(shí)例代碼
這篇文章主要介紹了PHP 獲取客戶(hù)端 IP 地址的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2018-11-11
PhpStorm2020 + phpstudyV8 +XDebug的教程詳解
這篇文章主要介紹了PhpStorm2020 + phpstudyV8 +XDebug的教程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
php的sprintf函數(shù)的用法 控制浮點(diǎn)數(shù)格式
這篇文章主要介紹了php的sprintf函數(shù)的用法,需要的朋友可以參考下2014-02-02
php實(shí)現(xiàn)的一個(gè)很好用HTML解析器類(lèi)可用于采集數(shù)據(jù)
下面就是這個(gè) HTML解析類(lèi)及用法,下面的功能是采集www.opendir.cn這個(gè)網(wǎng)站的百度收錄數(shù)據(jù),需要的朋友可以測(cè)試下2013-09-09
MixPHP、Yii和CodeIgniter的并發(fā)壓力測(cè)試小結(jié)
這篇文章主要給大家介紹了關(guān)于MixPHP、Yii和CodeIgniter的并發(fā)壓力測(cè)試的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01

