PHP面向对象之事务脚本模式(详解)
发布时间 - 2026-01-11 01:45:57 点击率:次如下所示:
/*
事务脚本模式: 类似于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
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
详解阿里云nginx服务器多站点的配置
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
潮流网站制作头像软件下载,适合母子的网名有哪些?
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
phpredis提高消息队列的实时性方法(推荐)
智能起名网站制作软件有哪些,制作logo的软件?
🚀拖拽式CMS建站能否实现高效与个性化并存?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
高防服务器:AI智能防御DDoS攻击与数据安全保障
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
Laravel如何生成API文档?(Swagger/OpenAPI教程)
如何快速选择适合个人网站的云服务器配置?
,交易猫的商品怎么发布到网站上去?
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
如何利用DOS批处理实现定时关机操作详解
零基础网站服务器架设实战:轻量应用与域名解析配置指南
JavaScript如何操作视频_媒体API怎么控制播放
Laravel怎么判断请求类型_Laravel Request isMethod用法
Linux系统运维自动化项目教程_Ansible批量管理实战
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
html5的keygen标签为什么废弃_替代方案说明【解答】
*服务器网站为何频现安全漏洞?
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
PHP 500报错的快速解决方法
教学论文网站制作软件有哪些,写论文用什么软件
?
深圳网站制作的公司有哪些,dido官方网站?
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
canvas 画布在主流浏览器中的尺寸限制详细介绍
再谈Python中的字符串与字符编码(推荐)
EditPlus中的正则表达式 实战(2)
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
Bootstrap整体框架之JavaScript插件架构
Laravel安装步骤详细教程_Laravel环境搭建指南
香港服务器部署网站为何提示未备案?
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
JS实现鼠标移上去显示图片或微信二维码
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
新三国志曹操传主线渭水交兵攻略
移动端脚本框架Hammer.js
原生JS实现图片轮播切换效果
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)

