如下所示:
/*
事务脚本模式: 类似于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面向对象之事务脚本模式(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# 事务脚本模式
# thinkPHP中钩子的两种配置调用方法详解
# thinkPHP中钩子的使用方法实例分析
# PHP钩子与简单分发方式实例分析
# thinkPHP基于反射实现钩子的方法分析
# php面向对象值单例模式
# PHP面向对象程序设计组合模式与装饰模式详解
# 老生常谈PHP面向对象之命令模式(必看篇)
# 老生常谈PHP面向对象之注册表模式
# 老生常谈PHP面向对象之解释器模式
# 浅谈PHP面向对象之访问者模式+组合模式
# PHP钩子实现方法解析
# 句柄
# 给大家
# 死了
# 希望能
# 所示
# 或者说
# 这篇
# 多说
# 类似于
# 数据库中
# 小编
# 大家多多
# 面向对象
# 客户端
# 没什么
# 实践中
# is_null
# getDSN
# throw
# base
相关文章:
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
如何选择靠谱的建站公司加盟品牌?
网站制作公司排行榜,四大门户网站排名?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
七夕网站制作视频,七夕大促活动怎么报名?
广东企业建站网站优化与SEO营销核心策略指南
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
建站之星在线客服如何快速接入解答?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
建站之星如何快速更换网站模板?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
公司网站设计制作厂家,怎么创建自己的一个网站?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
如何在阿里云通过域名搭建网站?
开源网站制作软件,开源网站什么意思?
建站之星安装需要哪些步骤及注意事项?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
如何构建满足综合性能需求的优质建站方案?
网站制作需要会哪些技术,建立一个网站要花费多少?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
建站主机选购指南:核心配置优化与品牌推荐方案
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
建站之星好吗?新手能否轻松上手建站?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
网站图片在线制作软件,怎么在图片上做链接?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
建站之星如何防范黑客攻击与数据泄露?
c# Task.ConfigureAwait(true) 在什么场景下是必须的
制作网站的模板软件,网站怎么建设?
浅谈Javascript中的Label语句
如何在阿里云ECS服务器部署织梦CMS网站?
定制建站是什么?如何实现个性化需求?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
高性价比服务器租赁——企业级配置与24小时运维服务
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
如何在景安云服务器上绑定域名并配置虚拟主机?
建站之星价格显示格式升级,你的预算足够吗?
如何注册花生壳免费域名并搭建个人网站?
建站之星展会模版如何一键下载生成?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
*请认真填写需求信息,我们会在24小时内与您取得联系。