needle-project / process-transaction
提供对PHP进程类似事务的支持
v0.1.0
2024-01-15 10:08 UTC
Requires
- php: 7.*|8.*
Requires (Dev)
- phpmd/phpmd: @stable
- phpunit/phpunit: 8.*|7.*|6.*
- squizlabs/php_codesniffer: 2.*
This package is auto-updated.
Last update: 2024-09-15 11:28:39 UTC
README
事务处理
这个库可以帮助你在某个进程失败时进行回滚,以运行你的进程! (类似于数据库事务)。
1. 安装
composer require needle-project/transactional
2. 使用
简单使用示例
<?php require_once 'vendor/autoload.php'; $paymentService = new class { public function chargeMoney() { // your logic echo "Customer has been charge!\n"; } public function refund() { echo "Customer has been refunded!\n"; } }; $stockReservationService = new class { public function reserveStock() { echo "Could not reserve stock!\n"; throw new \Exception("The trigger of failed process"); } }; $charge = new \NeedleProject\Transaction\Process( function () use ($paymentService) { return $paymentService->chargeMoney(); }, function () use ($paymentService) { return $paymentService->refund(); }, 'Payment Actions' ); $reserveStock = new \NeedleProject\Transaction\Process( function () use ($stockReservationService) { return $stockReservationService->reserveStock(); }, function () { echo "This will not be executed!\n"; }, "Stock Reserve" ); // Processing an order $executor = new \NeedleProject\Transaction\Executor(); $executor->addProcess($charge); $executor->addProcess($reserveStock); // Executing the processes try { $executor->execute(); } catch (\Exception $e) { $executor->rollBack(); } // Getting the process result echo $charge->getExecutionResult() . "\n"; echo $reserveStock->getRollBackResult() . "\n";