在事务中使用闭包优化代码结构
闭包函数
PHP官方文档对于闭包函数的定义:
匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。
简单来说,闭包函数也是一种数据类型,可以直接使用变量来存储、传参、调用等等。
事务
事务简单来说就是一个核心:
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
一般情况下,每一条SQL的执行情况都需要进行判断,如果执行成功则继续,否则回滚事务。以下是PDO事务代码:
$pdo = new PDO('mysql:host=localhost;dbname=demo', 'root', 'root'); try { $pdo->beginTransaction(); //todo 业务代码 $pdo->commit(); } catch (\Exception $e) { $pdo->rollBack(); throw $e; }
PHP实现
几乎所有事务都需要如此处理,但是这样重复代码太多,实际上只需要关心的部分是 业务代码 部分,使用闭包函数可以很好的解决这个问题。
闭包函数可以理解为具体的业务逻辑,不带任何事务相关操作,如果出现异常,会自动回滚事务。
PHP的简单实现代码如下:
function transaction(PDO $pdo, callable $callable) { try { $pdo->beginTransaction(); $result = call_user_func($callable, $pdo); $pdo->commit(); return $result; } catch (\Exception $e) { $pdo->rollBack(); throw $e; } }
PHP调用方法代码如下:
transaction($pdo, function (PDO $pdo) { return $pdo->query('INSERT INTO `test` VALUES (1)'); });
结语
使用闭包函数去简化样板代码在生产中是很常见的,具体的设计模式应该是类似“模板方法模式”。
来自我的博客:https://www.ddhigh.com/2019/0…
原文地址:https://segmentfault.com/a/1190000019198249
相关推荐
-
系统的讲解 – SSO单点登录 php基础
2019-5-11
-
php中的增删查改 php基础
2019-9-9
-
🚀 Hyperf 发布 Swoole Enterprise 及 视图 及 Task 组件 | 企业级的 PHP 微服务协程框架 php基础
2019-8-6
-
php 十六进制hex转str后字节问题 php基础
2019-9-7
-
一文看懂 PHP 7.3 更新 php基础
2018-12-28
-
将Markdown编辑器搬进您的博客-让我们更优雅的书写文章 php基础
2020-6-26
-
JSON Web Token 使用详解 php基础
2019-9-15
-
接口隔离原则(ISP) php基础
2019-9-6
-
php报错:POST data can’t be buffered; all data discarded php基础
2019-10-3
-
聊一聊 php 代码提示 php基础
2019-9-7