对于 JavaScript,我们可以做这样的事情来将作用域绑定(bind)到所需的函数:
function myFunction() {
alert(this.foo);
}
var MyClass = function() {
this.foo = 1;
};
var c = new MyClass();
myFunction.call(c); // `1`
我想用 PHP 做同样的事情。目前,我看到的成功工作是这样的,但这只适用于匿名函数:
$my_function = function() {
var_dump($this->foo);
};
class MyClass {
public $foo = 1;
};
$c = new MyClass();
Closure::bind($my_function, $c)();
// Or…
// $my_function->call($c);
这不起作用:
function my_function() {
var_dump($this->foo);
}
class MyClass {
public $foo = 1;
};
$c = new MyClass();
Closure::bind('my_function', $c)(); // :(
call_user_func([$c, 'my_function']); // :(
最佳答案
如果您使用的是 PHP 7.1+,则可以使用 Closure::fromCallable
将任何可调用的 PHP 转换为 Closure
(有关差异的一些信息,请参阅 PHP: Type hinting - Difference between `Closure` and `Callable`):
$closure = Closure::fromCallable('my_function');
此时您可以bind
你的对象实例到它并执行:
Closure::bind($closure, $c)();
关于php - 如何将 `$this` 绑定(bind)到 PHP 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52701638/