遗憾的是,您的比较不正确。
// 等同于
$cl1 = Closure::fromCallable("getName");
$cl1 = $cl1->bindTo($bob, 'A');
// 最有可能的是这个
$cl2 = 函数() {
返回 call_user_func_array("getName", func_get_args());
};
$cl2 = $cl2->bindTo($bob, 'A');
执行一个或另一个闭包应该会导致您已经发布的相同访问冲突错误。
----
一个简单的 PHP 7.0 polyfill 可以这样写
----
命名空间 YourPackage;
/**
* 类 Closure
*
* @参见 \Closure
*/
类 Closure
{
/**
* @参见 \Closure::fromCallable()
* @参数 callable $callable
* @返回 \Closure
*/
公共静态函数 fromCallable(callable $callable)
{
// 如果我们有本地版本,让我们使用本地版本!
如果(method_exists(\Closure::class, 'fromCallable')) {
返回 \Closure::fromCallable($callable);
}
返回函数 () 使用 ($callable) {
返回 call_user_func_array($callable, func_get_args());
};
}
}