亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

在事務(wù)中使用閉包優(yōu)化代碼結(jié)構(gòu)

zhiwei / 3241人閱讀

摘要:以下是事務(wù)代碼業(yè)務(wù)代碼實現(xiàn)幾乎所有事務(wù)都需要如此處理,但是這樣重復(fù)代碼太多,實際上只需要關(guān)心的部分是業(yè)務(wù)代碼部分,使用閉包函數(shù)可以很好的解決這個問題。

閉包函數(shù)

PHP官方文檔對于閉包函數(shù)的定義:

匿名函數(shù)(Anonymous functions),也叫閉包函數(shù)(closures),允許 臨時創(chuàng)建一個沒有指定名稱的函數(shù)。最經(jīng)常用作回調(diào)函數(shù)(callback)參數(shù)的值。當(dāng)然,也有其它應(yīng)用的情況。

簡單來說,閉包函數(shù)也是一種數(shù)據(jù)類型,可以直接使用變量來存儲、傳參、調(diào)用等等。

事務(wù)

事務(wù)簡單來說就是一個核心:

事務(wù)處理可以用來維護數(shù)據(jù)庫的完整性,保證成批的 SQL 語句要么全部執(zhí)行,要么全部不執(zhí)行。

一般情況下,每一條SQL的執(zhí)行情況都需要進行判斷,如果執(zhí)行成功則繼續(xù),否則回滾事務(wù)。以下是PDO事務(wù)代碼:

$pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "root");
try {
    $pdo->beginTransaction();
    //todo 業(yè)務(wù)代碼
    $pdo->commit();
} catch (Exception $e) {
    $pdo->rollBack();
    throw $e;
}
PHP實現(xiàn)

幾乎所有事務(wù)都需要如此處理,但是這樣重復(fù)代碼太多,實際上只需要關(guān)心的部分是 業(yè)務(wù)代碼 部分,使用閉包函數(shù)可以很好的解決這個問題。

閉包函數(shù)可以理解為具體的業(yè)務(wù)邏輯,不帶任何事務(wù)相關(guān)操作,如果出現(xiàn)異常,會自動回滾事務(wù)。

PHP的簡單實現(xiàn)代碼如下:

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調(diào)用方法代碼如下:

transaction($pdo, function (PDO $pdo) {
    return $pdo->query("INSERT INTO `test` VALUES (1)");
});
結(jié)語

使用閉包函數(shù)去簡化樣板代碼在生產(chǎn)中是很常見的,具體的設(shè)計模式應(yīng)該是類似“模板方法模式”。

來自我的博客:https://www.ddhigh.com/2019/0...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/31473.html

相關(guān)文章

  • Yii2開發(fā)技巧 使用類似閉包的方式封裝事務(wù)

    摘要:第二沒有記錄日志的行為,即使出了問題也不容易排除。異常錯誤然后回到如何傳參的問題,我們可以使用閉包,貼一段偽代碼,如下執(zhí)行事務(wù)業(yè)務(wù)代碼大功告成,代碼看起來有沒有更好看呢如有問題,歡迎指教。 在控制器中執(zhí)行事務(wù)的時候,一般的代碼如下: $transaction = Yii::$app->db->beginTransaction(); try { //一些業(yè)務(wù)代碼 $tra...

    shevy 評論0 收藏0
  • Laravel使用數(shù)據(jù)庫事務(wù)以及捕獲事務(wù)失敗后的異常

    摘要:在中要想在數(shù)據(jù)庫事務(wù)中運行一組操作,則可以在中使用方法。如果在事務(wù)的閉包內(nèi)拋出異常,事務(wù)將會被自動還原。 Description 在Laravel中要想在數(shù)據(jù)庫事務(wù)中運行一組操作,則可以在 DB facade 中使用 transaction 方法。如果在事務(wù)的閉包內(nèi)拋出異常,事務(wù)將會被自動還原。如果閉包運行成功,事務(wù)將被自動提交。你不需要擔(dān)心在使用 transaction 方法時還需要...

    newtrek 評論0 收藏0
  • 學(xué)Java編程需要注意的地方

    摘要:學(xué)編程真的不是一件容易的事不管你多喜歡或是多會編程,在學(xué)習(xí)和解決問題上總會碰到障礙。熟練掌握核心內(nèi)容,特別是和多線程初步具備面向?qū)ο笤O(shè)計和編程的能力掌握基本的優(yōu)化策略。   學(xué)Java編程真的不是一件容易的事,不管你多喜歡或是多會Java編程,在學(xué)習(xí)和解決問題上總會碰到障礙。工作的時間越久就越能明白這個道理。不過這倒是一個讓人進步的機會,因為你要一直不斷的學(xué)習(xí)才能很好的解決你面前的難題...

    leanxi 評論0 收藏0
  • 【前端性能優(yōu)化】高性能JavaScript整理總結(jié)

    摘要:然后執(zhí)行環(huán)境會創(chuàng)建一個活動對象,活動對象作為函數(shù)運行的變量對象,包含所有局部變量命名參數(shù)參數(shù)集合和,當(dāng)執(zhí)行環(huán)境銷毀,活動對象也被銷毀。 高性能JavaScript整理總結(jié) 關(guān)于前端性能優(yōu)化:首先想到的是雅虎軍規(guī)34條然后最近看了《高性能JavaScript》大概的把書中提到大部分知識梳理了下并加上部分個人理解這本書有參考雅虎特別性能小組的研究成果,所以跟34 軍規(guī)有很多相似之處有不當(dāng)之...

    zzbo 評論0 收藏0
  • 【前端性能優(yōu)化】高性能JavaScript整理總結(jié)

    摘要:然后執(zhí)行環(huán)境會創(chuàng)建一個活動對象,活動對象作為函數(shù)運行的變量對象,包含所有局部變量命名參數(shù)參數(shù)集合和,當(dāng)執(zhí)行環(huán)境銷毀,活動對象也被銷毀。 高性能JavaScript整理總結(jié) 關(guān)于前端性能優(yōu)化:首先想到的是雅虎軍規(guī)34條然后最近看了《高性能JavaScript》大概的把書中提到大部分知識梳理了下并加上部分個人理解這本書有參考雅虎特別性能小組的研究成果,所以跟34 軍規(guī)有很多相似之處有不當(dāng)之...

    bovenson 評論0 收藏0

發(fā)表評論

0條評論

zhiwei

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<