资讯专栏INFORMATION COLUMN

在事务中使用闭包优化代码结构

zhiwei / 3050人阅读

摘要:以下是事务代码业务代码实现几乎所有事务都需要如此处理,但是这样重复代码太多,实际上只需要关心的部分是业务代码部分,使用闭包函数可以很好的解决这个问题。

闭包函数

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://www.ucloud.cn/yun/31473.html

相关文章

  • Yii2开发技巧 使用类似闭包的方式封装事务

    摘要:第二没有记录日志的行为,即使出了问题也不容易排除。异常错误然后回到如何传参的问题,我们可以使用闭包,贴一段伪代码,如下执行事务业务代码大功告成,代码看起来有没有更好看呢如有问题,欢迎指教。 在控制器中执行事务的时候,一般的代码如下: $transaction = Yii::$app->db->beginTransaction(); try { //一些业务代码 $tra...

    shevy 评论0 收藏0
  • Laravel使用数据库事务以及捕获事务失败后的异常

    摘要:在中要想在数据库事务中运行一组操作,则可以在中使用方法。如果在事务的闭包内抛出异常,事务将会被自动还原。 Description 在Laravel中要想在数据库事务中运行一组操作,则可以在 DB facade 中使用 transaction 方法。如果在事务的闭包内抛出异常,事务将会被自动还原。如果闭包运行成功,事务将被自动提交。你不需要担心在使用 transaction 方法时还需要...

    newtrek 评论0 收藏0
  • 学Java编程需要注意的地方

    摘要:学编程真的不是一件容易的事不管你多喜欢或是多会编程,在学习和解决问题上总会碰到障碍。熟练掌握核心内容,特别是和多线程初步具备面向对象设计和编程的能力掌握基本的优化策略。   学Java编程真的不是一件容易的事,不管你多喜欢或是多会Java编程,在学习和解决问题上总会碰到障碍。工作的时间越久就越能明白这个道理。不过这倒是一个让人进步的机会,因为你要一直不断的学习才能很好的解决你面前的难题...

    leanxi 评论0 收藏0
  • 【前端性能优化】高性能JavaScript整理总结

    摘要:然后执行环境会创建一个活动对象,活动对象作为函数运行的变量对象,包含所有局部变量命名参数参数集合和,当执行环境销毁,活动对象也被销毁。 高性能JavaScript整理总结 关于前端性能优化:首先想到的是雅虎军规34条然后最近看了《高性能JavaScript》大概的把书中提到大部分知识梳理了下并加上部分个人理解这本书有参考雅虎特别性能小组的研究成果,所以跟34 军规有很多相似之处有不当之...

    zzbo 评论0 收藏0
  • 【前端性能优化】高性能JavaScript整理总结

    摘要:然后执行环境会创建一个活动对象,活动对象作为函数运行的变量对象,包含所有局部变量命名参数参数集合和,当执行环境销毁,活动对象也被销毁。 高性能JavaScript整理总结 关于前端性能优化:首先想到的是雅虎军规34条然后最近看了《高性能JavaScript》大概的把书中提到大部分知识梳理了下并加上部分个人理解这本书有参考雅虎特别性能小组的研究成果,所以跟34 军规有很多相似之处有不当之...

    bovenson 评论0 收藏0

发表评论

0条评论

zhiwei

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<