这里有新鲜出炉的 PHP 教程,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。
下面小编就为大家带来一篇 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 面向对象之事务脚本模式 (详解) 就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持 PHPERZ。
来源: http://www.phperz.com/article/17/0807/339612.html