您可以在闭包对象上使用bind方法来更改this
特定上下文中的含义。请注意,此功能在 PHP 5.4 中可用。
官方说明
复制具有特定绑定对象和类范围的闭包
class TestClass {
protected $var1 = "World";
}
$a = new TestClass();
$func = function($a){ echo $a." ".$this->var1; };
$boundFunction = Closure::bind($func, $a, 'TestClass');
$boundFunction("Hello");
// outputs Hello World
此语法的替代方法是使用闭包实例的 bindTo 方法(匿名函数)
class TestClass {
protected $var1 = "World";
}
$a = new TestClass();
$func = function($a){ echo $a." ".$this->var1; };
$boundFunction = $func->bindTo($a, $a);
$boundFunction("Hello");
// outputs Hello World
在您的示例中,相关代码将是
$test = function() {
echo $this->name;
};
$user = new stdclass;
$user->name = "John Doe";
$bound = $test->bindTo($user, $user);
call_user_func($bound);