PHP面向对象之事务脚本模式(详解)
如下所示:
/* 事务脚本模式:类似于thinkphp中的model层,或者说就是操作数据库的类。 个人觉得实践中使用起来还是挺简单方便的,就是SQL语句写死了的话,灵活性就不够。 示例代码如下: */ namespacewoo\process; abstractclassBase{ static$DB;//pdo对象 static$stmts=array();//sql语句句柄 function__construct(){ $dsn=\woo\base\ApplicationRegistry::getDSN(); if(is_null($dsn)){ thrownew\woo\base\AppException("NoDSN"); } self::$DB=newPDO($dsn); self::$DB->setAttribute(\PDO::ATTR_ERRMODE,\PDO::ERRMODE_EXCEPTION); } functionprepareStatement($stmt_s){//缓存sql语句句柄 if(isset(self::$stmts($stmt_s)){ returnself::$stmts[$stmt_s]; } $stmt_handle=self::$DB->prepare($stmt_s); self::$stmts[$stmt_s]=$stmt_handle; return$stmt_handle; } protectedfunctiondoStatement($stmt_s,$values_a){//执行sql并获取一个语句资源 $sth=$this->prepareStatement($stmt_s); $sth->closeCursor(); $db_result=$sth->execute($values_a); return$sth; } } //这个类就是向数据库中写入一些数据,比较简单没什么好多说的 classVenueManagerextendsBase{ static$add_venue="INSERTINTOvenue(name)values(?)"; static$add_space="INSERTINTOspace(name,venue)values(?,?)"; static$check_slot="SELECTid,nameFROMeventWHEREspace=?AND(start+duration)>?ANDstart"; static$add_event="INSERTINTOevent(name,space,start,duration)values(?,?,?,?)"; functionaddVenue($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_arrayas$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; } functionbookEvent($space_id,$name,$time,$duration){ $values=array($space_id,$time,($time+$duration)); $stmt=$this->doStatement(self::$check_slot,$values,false); if($result=$stmt->fetch()){ thrownew\woo\base\AppException("doublebooked!tryagain"); } $this->doStatement(self::$add_event,array($name,$space_id,$time,$duration)); } } //客户端,使用起来还是比较简便的 $venue=newVenueManager(); $venue->addVenue('test',array('test1','test2','test3'));
以上这篇PHP面向对象之事务脚本模式(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。