Tôi có hai mô-đun riêng biệt có thể được sử dụng độc lập, nhưng Module2 phụ thuộc vào Module1.Cần trợ giúp với các hoạt động nguyên tử lồng nhau liên quan đến các giao dịch PDO
Module2 có một thao tác cần phải là nguyên tử và nó gọi một phép toán trong Mô-đun 1 cũng cần phải là nguyên tử.
Giả sử tôi đã thiết PDO :: ATTR_ERRMODE để PDO: ERRMODE_EXCEPTION, sau đây nặng nề genericised và snipped đang mang này: PHP Fatal error: của router 'PDOException' với thông điệp 'Đã có một giao dịch tích cực'
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;
}
}
}
tôi không chắc chắn cách tốt nhất để đi về vấn đề này - hoạt động lồng nhau chắc chắn sẽ được gọi độc lập và hoàn toàn là phải là nguyên tử khi được gọi theo đúng nghĩa của nó. Việc đặt onus vào người dùng của lớp để quản lý giao dịch và bảo toàn nguyên tử không phải là điều mong muốn vì tôi chắc chắn rằng người dùng của lớp sẽ không bao giờ thực thi nó.
Đã thêm một số lông tơ. Hoạt động nguyên tử của bạn sẽ có thể sử dụng giao dịch một mình hoặc với bạn bè xung quanh họ. – Arkh