Доступ к переменным из родительской области в анонимной функции PHP

Я хочу написать функцию, которая выполняет какую-то грязную работу, регистрируя транзакцию, но область анонимных функций, похоже, не регистрирует родительскую область переменных $db и $value . Как передать переменные в закрытие?

По иронии судьбы, замыкание тегов SO не очень точно описывает PHP-версию …?

 class controller { function submit() { $db = new database(); $result = $db->execute_tx(function() { $db->insert_model_a($value_a); // ERROR: $db is non-object $db->insert_model_b($value_b); }); } } class database { function execute_tx($atomic_action) { try { $this->start(); $atomic_action(); $this->commit(); // etc.. } catch(...) { $this->rollback(); // etc.. } finally { // etc.. } } function insert_model_a() { ... } function insert_model_b() { ... } } 

Используйте ключевое слово use для привязки переменных к области действия.

 function() use ($db) { 

Закрытие также может наследовать переменные из родительской области. Любые такие переменные должны быть объявлены в заголовке функции [using use ].

http://www.php.net/manual/en/functions.anonymous.php