PHP官方文檔對於閉包函數的定義:php
匿名函數(Anonymous functions),也叫閉包函數(closures),容許 臨時建立一個沒有指定名稱的函數。最常常用做回調函數(callback)參數的值。固然,也有其它應用的狀況。
簡單來講,閉包函數也是一種數據類型,能夠直接使用變量來存儲、傳參、調用等等。html
事務簡單來講就是一個核心:mysql
事務處理能夠用來維護數據庫的完整性,保證成批的 SQL 語句要麼所有執行,要麼所有不執行。
通常狀況下,每一條SQL的執行狀況都須要進行判斷,若是執行成功則繼續,不然回滾事務。如下是PDO事務代碼:sql
$pdo = new PDO('mysql:host=localhost;dbname=demo', 'root', 'root'); try { $pdo->beginTransaction(); //todo 業務代碼 $pdo->commit(); } catch (\Exception $e) { $pdo->rollBack(); throw $e; }
幾乎全部事務都須要如此處理,可是這樣重複代碼太多,實際上只須要關心的部分是 業務代碼 部分,使用閉包函數能夠很好的解決這個問題。數據庫
閉包函數能夠理解爲具體的業務邏輯,不帶任何事務相關操做,若是出現異常,會自動回滾事務。設計模式
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...code