php事務 面向對象,關于PHP面向對象的事務腳本模式

下面為大家帶來一篇PHP面向對象之事務腳本模式(詳解)。內容挺不錯的,現在就分享給大家,也給大家做個參考。

如下所示:

/*

事務腳本模式: 類似于thinkphp中的model層,或者說就是操作數據庫的類。

個人覺得實踐中使用起來還是挺簡單方便的,就是SQL語句寫死了的話,靈活性就不夠。

示例代碼如下:

*/

namespace woo\process;

abstract class Base{

static $DB; //pdo對象

static $stmts = array(); //sql語句句柄

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語句句柄

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){ //執行sql并獲取一個語句資源

$sth = $this->prepareStatement($stmt_s);

$sth->closeCursor();

$db_result = $sth->execute($values_a);

return $sth;

}

}

//這個類就是向數據庫中寫入一些數據,比較簡單沒什么好多說的

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));

}

}

//客戶端,使用起來還是比較簡便的

$venue = new VenueManager();

$venue->addVenue('test',array('test1','test2','test3'));

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/270991.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/270991.shtml
英文地址,請注明出處:http://en.pswp.cn/news/270991.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分布式數據庫相關概念介紹

1、分布式數據庫的概念分布式數據庫系統(Distributed Database System,DDBS)是針對面向地理上分散,而管理上有需要不同程度集中管理的需求而提出的一種數據庫管理信息系統。2、分布式數據庫系統組成LDBMS(Local DBMS):…

社會管理網格化 源碼_為什么說網格化管理是基層社會治理的有效武器

在社會治安綜合治理中網格化管理是當前各地加強基層社會治理的一種有效“武器”。為什么要說網格化管理是基層社會治理的有效“武器”?這就要為大家講講以下幾點了,好讓大家清楚的明白為什么。網格化管理適應當代社會的基本特性。網格化服務管理是當前城…

【Time系列一】datetime的妙用

今天在弄個自動關機小腳本的時候,遇到了時間轉換的問題,也難怪,以前沒學過, 不能怪我不會哦! 首先,先學會打印出當前時間的幾種方式 參考開源社區: http://my.oschina.net/u/1032854/blog/198179#OSC_h1_3 菜鳥編程:…

循環體內,字符串的連接方式,使用StringBuilder的append方法進行擴展

循環體內,字符串的連接方式,使用StringBuilder的append方法進行擴展

JS樹結構操作:查找、遍歷、篩選、樹結構和列表結構相互轉換

經常有同學問樹結構的相關操作,也寫了很多次,在這里總結一下 JS 樹形結構一些操作的實現思路,并給出了簡潔易懂的代碼實現。本文內容結構大概如下:JS樹結構相關操作1遍歷樹結構1. 樹結構介紹JS中樹結構一般是類似于這樣的結構&…

python框架django的使用_Django框架的基本使用,若依框架

Django框架的基本使用,若依框架Django框架的基本使用Django是一個功能強大的web框架框架模式1、MVC和MTV框架MVC:Web服務器開發領域里著名的MVC模式,所謂MVC就是把Web應用分為模型(M),控制器(C)和視圖(V)三層,結構說明…

初學js

今天開始接觸js,知道了js的功能以及學習的意義, 今天從命名的規范和數值的規則就能看出js是1門非常嚴謹的課程,只有做好細節才能體現出js的強大之處, var是定義一個名字 var name1; 定義了還能賦值,可以是數…

數據庫:SQLServer中GUID用法介紹

今天給大家分享一下SQLServer中生成GUID的用法。一、NEWID用法NEWID()作用是生成無順序的GUID字符串。用法如下:SELECT NEWID() --生成36位的GUIDSELECT REPLACE(newid(), -, ) -- 生成32 位的GUID二、NEWSEQUENTIALID用法1、NEWSEQUENTIALID是什么?在指…

oracle po:默認申請分組,PR自動創建PO采購訂單:強制按照PR行進行分組

有時候,需要實現強制按照PR行來自動創建PO。舉個例子:假設2張PR,同一個物料,同一個需求日期等等的,在合并采購訂單的時候,希望是2個PO行。按照標準功能的處理邏輯,如果是同一個物料需求日期(配置…

cserialport 循環發送信號_C++信號處理

免費C語言教程:阿里云大學——開發者課堂(點擊文章最下方“了解更多”)信號是由操作系統傳給進程的中斷,會提早終止一個程序。在 UNIX、LINUX、Mac OS X 或 Windows 系統上,可以通過按 CtrlC 產生中斷。有些信號不能被程序捕獲,但…

Javascript第一天

引入的三種方法&#xff1a; 1、將javascript代碼插入html文檔<head>部分的<script>標簽中 例&#xff1a;<head> <script type“text/javascript”> //javascript 代碼 alert(‘hello world’); </script> </head> 2、將javascript代碼存…

不要在foreach循環里進行元素的remove/add操作。remove元素請使用iteratot方式,如果并發操作,需要對Iterator對象加鎖

不要在foreach循環里進行元素的remove/add操作。remove元素請使用iteratot方式&#xff0c;如果并發操作&#xff0c;需要對Iterator對象加鎖

Win7和Win10操作系統優劣對比,看完你就懂了!

一直以來&#xff0c;針對微軟的Windows系統討論最熱烈的莫過于win7和win10系統了&#xff0c;兩者究竟誰好誰壞&#xff1f;小編今天就帶大家從幾個不同的角度分析兩者的優缺點&#xff0c;如有不對&#xff0c;歡迎大家指正&#xff01;一、win 7系統的幾大特點&#xff1a;1…

linux bash命令找不到,Linux下提示命令找不到:bash:command not found

Linux下輸入某些命令時會提示&#xff1a;bash:command not found。首先&#xff0c;查看$PATH中是否包含了這些命令。$PATH&#xff1a;決定了shell到哪些目錄中去尋找命令或程序&#xff0c;PATH值是一系列的目錄。當運行程序時&#xff0c;linux到這些目錄下搜索進行編譯鏈接…

dhcp 續約review報文_Linux的私房菜 DHCP

譯DHCP服務DHCP的全稱是動態主機配置協議&#xff0c;用來自動給客戶機分配TCP/IP信息的網絡協議。Dynamic Host Configuration Protocol&#xff0c;前身是BOOTP協議&#xff0c;是一個局域網的網絡協議&#xff0c;使用UDP協議工作&#xff0c;統一使用兩個IANA分配的端口&am…

硬件編程:硬件開發中常用的幾種通信接口總結

在嵌入式系統中&#xff0c;板上通信接口是指用于將各種集成電路與其他外圍設備交互連接的通信通路或總線。以下內容為常用板上通信接口&#xff1a;包括I2C、SPI、UART、1-Wire&#xff1a;I2C總線I2C總線是一種同步、雙向、半雙工的兩線式串行接口總線。這里&#xff0c;半雙…

集合初始化時,指定集合初始值大小

集合初始化時&#xff0c;指定集合初始值大小

hadoop常用linux命令,# Hadoop學習筆記(二)——Linux常用命令

ifconfigLinux ifconfig命令用于顯示或設置網絡設備。ifconfig可設置網絡設備的狀態&#xff0c;或是顯示目前的設置。ifconfig.png語法ifconfig [網絡設備][down up -allmulti -arp -promisc][add][del][][io_addr][irq][media][mem_start][metric][mtu][netmask][tunnel][-br…

數據庫:計算地球上兩個坐標點之間里程

今天給大家分享計算地球上兩個坐標點之間里程不同數據庫版本的腳本。1、SQLServer腳本–-計算地球上兩個坐標點&#xff08;經度&#xff0c;緯度&#xff09;之間距離sql函數 CREATE FUNCTION [dbo].[fnGetDistance](LatBegin REAL , LngBegin REAL, LatEnd REAL, LngEnd REA…