gpt4 book ai didi

PHP面向对象之事务脚本模式(详解)

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章PHP面向对象之事务脚本模式(详解)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*
事务脚本模式: 类似于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面向对象之事务脚本模式(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

最后此篇关于PHP面向对象之事务脚本模式(详解)的文章就讲到这里了,如果你想了解更多关于PHP面向对象之事务脚本模式(详解)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com