全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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面向对象之事务脚本模式(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# 事务脚本模式  # 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小时内与您取得联系。