Потребовалось выполнять защищенный код с блокировкой таблицы (в частности очередь, но не только).
использую такой кейс:
public function foo(){
$this->lockTable();
try{
//Что-то делаю, что может вызвать исключение
}catch(Exception $e){
$this->unlockTable();
throw $e;
}
$this->unlockTable();
}
Приходится этот код повторять во всех местах, где нужно такое поведение. Какие есть кейсы или паттерны для данной задачи? Пока писал, на ум пришел вариант с замыканием, что-то вроде такого:
class parentClass{
public function lockTable(){...}
public function unlockTable(){...}
public function safeLockAndExecute(Closure $closure){
$this->lockTable();
try{
$closure();
}catch(Exception $e){
$this->unlockTable();
throw $e;
}
$this->unlockTable();
}
}
Может есть еще какие кейсы?