Подтвердить что ты не робот

Доступ к переменным из родительской области в анонимной функции 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() { ... }
}
4b9b3361

Ответ 1

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

function() use ($db) {

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

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