相关疑难解决方法(0)

从匿名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() { ... }
}
Run Code Online (Sandbox Code Playgroud)

php closures

31
推荐指数
1
解决办法
1万
查看次数

标签 统计

closures ×1

php ×1