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