摘要:以下是事務(wù)代碼業(yè)務(wù)代碼實(shí)現(xiàn)幾乎所有事務(wù)都需要如此處理,但是這樣重復(fù)代碼太多,實(shí)際上只需要關(guān)心的部分是業(yè)務(wù)代碼部分,使用閉包函數(shù)可以很好的解決這個(gè)問題。
閉包函數(shù)
PHP官方文檔對(duì)于閉包函數(shù)的定義:
匿名函數(shù)(Anonymous functions),也叫閉包函數(shù)(closures),允許 臨時(shí)創(chuàng)建一個(gè)沒有指定名稱的函數(shù)。最經(jīng)常用作回調(diào)函數(shù)(callback)參數(shù)的值。當(dāng)然,也有其它應(yīng)用的情況。
簡(jiǎn)單來說,閉包函數(shù)也是一種數(shù)據(jù)類型,可以直接使用變量來存儲(chǔ)、傳參、調(diào)用等等。
事務(wù)事務(wù)簡(jiǎn)單來說就是一個(gè)核心:
事務(wù)處理可以用來維護(hù)數(shù)據(jù)庫的完整性,保證成批的 SQL 語句要么全部執(zhí)行,要么全部不執(zhí)行。
一般情況下,每一條SQL的執(zhí)行情況都需要進(jìn)行判斷,如果執(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實(shí)現(xiàn)
幾乎所有事務(wù)都需要如此處理,但是這樣重復(fù)代碼太多,實(shí)際上只需要關(guān)心的部分是 業(yè)務(wù)代碼 部分,使用閉包函數(shù)可以很好的解決這個(gè)問題。
閉包函數(shù)可以理解為具體的業(yè)務(wù)邏輯,不帶任何事務(wù)相關(guān)操作,如果出現(xiàn)異常,會(huì)自動(dòng)回滾事務(wù)。
PHP的簡(jiǎn)單實(shí)現(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ù)去簡(jiǎn)化樣板代碼在生產(chǎn)中是很常見的,具體的設(shè)計(jì)模式應(yīng)該是類似“模板方法模式”。
來自我的博客:https://www.ddhigh.com/2019/0...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/31473.html
摘要:第二沒有記錄日志的行為,即使出了問題也不容易排除。異常錯(cuò)誤然后回到如何傳參的問題,我們可以使用閉包,貼一段偽代碼,如下執(zhí)行事務(wù)業(yè)務(wù)代碼大功告成,代碼看起來有沒有更好看呢如有問題,歡迎指教。 在控制器中執(zhí)行事務(wù)的時(shí)候,一般的代碼如下: $transaction = Yii::$app->db->beginTransaction(); try { //一些業(yè)務(wù)代碼 $tra...
摘要:在中要想在數(shù)據(jù)庫事務(wù)中運(yùn)行一組操作,則可以在中使用方法。如果在事務(wù)的閉包內(nèi)拋出異常,事務(wù)將會(huì)被自動(dòng)還原。 Description 在Laravel中要想在數(shù)據(jù)庫事務(wù)中運(yùn)行一組操作,則可以在 DB facade 中使用 transaction 方法。如果在事務(wù)的閉包內(nèi)拋出異常,事務(wù)將會(huì)被自動(dòng)還原。如果閉包運(yùn)行成功,事務(wù)將被自動(dòng)提交。你不需要擔(dān)心在使用 transaction 方法時(shí)還需要...
摘要:學(xué)編程真的不是一件容易的事不管你多喜歡或是多會(huì)編程,在學(xué)習(xí)和解決問題上總會(huì)碰到障礙。熟練掌握核心內(nèi)容,特別是和多線程初步具備面向?qū)ο笤O(shè)計(jì)和編程的能力掌握基本的優(yōu)化策略。 學(xué)Java編程真的不是一件容易的事,不管你多喜歡或是多會(huì)Java編程,在學(xué)習(xí)和解決問題上總會(huì)碰到障礙。工作的時(shí)間越久就越能明白這個(gè)道理。不過這倒是一個(gè)讓人進(jìn)步的機(jī)會(huì),因?yàn)槟阋恢辈粩嗟膶W(xué)習(xí)才能很好的解決你面前的難題...
摘要:然后執(zhí)行環(huán)境會(huì)創(chuàng)建一個(gè)活動(dòng)對(duì)象,活動(dòng)對(duì)象作為函數(shù)運(yùn)行的變量對(duì)象,包含所有局部變量命名參數(shù)參數(shù)集合和,當(dāng)執(zhí)行環(huán)境銷毀,活動(dòng)對(duì)象也被銷毀。 高性能JavaScript整理總結(jié) 關(guān)于前端性能優(yōu)化:首先想到的是雅虎軍規(guī)34條然后最近看了《高性能JavaScript》大概的把書中提到大部分知識(shí)梳理了下并加上部分個(gè)人理解這本書有參考雅虎特別性能小組的研究成果,所以跟34 軍規(guī)有很多相似之處有不當(dāng)之...
摘要:然后執(zhí)行環(huán)境會(huì)創(chuàng)建一個(gè)活動(dòng)對(duì)象,活動(dòng)對(duì)象作為函數(shù)運(yùn)行的變量對(duì)象,包含所有局部變量命名參數(shù)參數(shù)集合和,當(dāng)執(zhí)行環(huán)境銷毀,活動(dòng)對(duì)象也被銷毀。 高性能JavaScript整理總結(jié) 關(guān)于前端性能優(yōu)化:首先想到的是雅虎軍規(guī)34條然后最近看了《高性能JavaScript》大概的把書中提到大部分知識(shí)梳理了下并加上部分個(gè)人理解這本書有參考雅虎特別性能小組的研究成果,所以跟34 軍規(guī)有很多相似之處有不當(dāng)之...
閱讀 1526·2023-04-26 00:25
閱讀 918·2021-09-27 13:36
閱讀 933·2019-08-30 14:14
閱讀 2177·2019-08-29 17:10
閱讀 1015·2019-08-29 15:09
閱讀 1950·2019-08-28 18:21
閱讀 970·2019-08-26 13:27
閱讀 977·2019-08-26 10:58