我有一个像
这样的简单功能function transfer_money($from, $to, $amount) {
// START TRANSACTION
deduct_money($from, $amount); // already using transaction internally
add_money($to, $amount); // already using transaction internally
// COMMIT;
}
假设函数deduct_money
和add_money
已经在内部使用事务,我如何用另一个事务包装新函数?
答案 0 :(得分:0)
假设您希望您的两个函数按原样继续使用事务,但希望将整个过程包装在更高级别的"事务,您可以构建自己的方法/函数来开始和结束事务......例如:
<?php
class Transaction
{
private static $stack = 0;
public static function begin(PDO $adapter)
{
if(self::$stack === 0) {
$adapter->beginTransaction();
}
self::$stack++;
}
public static function commit(PDO $adapter)
{
if(self::$stack === 0) {
throw new Exception('Cannot commit as no transaction has begun');
}
self::$stack--;
if(self::$stack === 0) {
$adapter->commit();
}
}
}
这将允许你&#34;堆叠&#34;事务和事务只有在提交事务的相同数量的调用已被收到作为启动事务的数字时才会被提交。