Ben bağımsız kullanılabilen iki farklı modülleri var, ama Module2 Module1'deki bağlıdır.
Module2 atom olması gereken bir operasyon var, ve o da atom olması gereken Module1'deki bir operasyon çağırır.
Assuming I have set PDO::ATTR_ERRMODE to PDO:ERRMODE_EXCEPTION, the following heavily genericised and snipped code yields this: PHP Fatal error: Uncaught exception 'PDOException' with message 'There is already an active transaction'
Module1:
<?php
class Module1
{
...
public function atomicOperation($stuff)
{
$this->pdo->beginTransaction();
try {
$stmt = $this->pdo->prepare(...);
...
$this->pdo->commit();
}
catch (Exception $ex) {
$this->pdo->rollBack();
throw $ex;
}
}
}
Module2:
<?php
class Module2
{
public $module1;
...
public function atomicOperation($stuff)
{
$this->pdo->beginTransaction();
try {
$stmt = $this->pdo->prepare(...);
...
$this->module1->atomicOperation($stuff);
...
$this->pdo->commit();
}
catch (Exception $ex) {
$this->pdo->rollBack();
throw $ex;
}
}
}
Ben bu konuda gitmek için en iyi yolu, emin değilim - kendi başına çağrıldığında iç içe operasyon kesinlikle must atomik olacak bağımsız ve kesinlikle çağrılır. Ben sınıfın kullanıcıları onu zorlamak asla eminim olarak işlem yönetmek ve bölünmezlik korumak için sınıf 'kullanıcı bir sorumluluk yerleştirme arzu değildir.