我想写一个函数来记录事务,但匿名函数作用域似乎没有注册父作用域 $db
和 $value
变量。如何将变量传递到闭包中?
具有讽刺意味的是,SO 标签“closures”并没有非常准确地描述它的 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
关键字将变量绑定(bind)到函数的范围内。
function() use ($db) {
Closures may also inherit variables from the parent scope. Any such variables must be declared in the function header [using
use
].
关于php - 在匿名 PHP 函数中从父范围访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15042197/