Closure::bindTo
Closure::bindTo
(PHP 5 >= 5.4.0, PHP 7)
Closure::bindTo - 使用新的绑定对象和类范围复制闭包
描述
public Closure Closure::bindTo ( object $newthis [, mixed $newscope = "static" ] )
创建并返回一个新的匿名函数,它具有与这个相同的主体和绑定变量,但可能具有不同的绑定对象和新的类范围。
“绑定对象”决定了函数体中的值$
,而“类范围”表示一个类,该类确定匿名函数将访问哪些私有和受保护的成员。也就是说,可见的成员与匿名函数是作为newscope
参数值给出的类的方法相同。
静态闭包不能有任何绑定对象(参数的值newthis
应该是NULL
),但是这个函数可以用来改变它们的类范围。
这个函数将确保对于一个非静态的闭包,有一个绑定的实例将暗示被限定范围,反之亦然。为此,给定范围但是NULL
实例的非静态闭包由静态和非静态非范围闭包构成,赋予非空实例的范围限定为未指定的类。
注意
:如果您只想复制匿名函数,则可以使用克隆。
参数
newthis
给定的匿名函数应该绑定到的对象,或者NULL
闭包被解除绑定的对象。
newscope
与闭包相关联的类作用域,或'static'来保留当前的作用域。如果给出一个对象,则将使用该对象的类型。这决定了绑定对象的受保护方法和私有方法的可见性。不允许将内部类的(对象)作为此参数传递。
返回值
返回新创建的Closure对象或失败时返回FALSE
Changelog
版本 | 描述 |
---|---|
7.0.0 | newscope不能作为一个内部类的对象,在这个版本之前有可能是什么。 |
示例
Example #1 Closure::bindTo() example
<?php
class A {
function __construct($val) {
$this->val = $val;
}
function getClosure() {
//returns closure bound to this object and scope
return function() { return $this->val; };
}
}
$ob1 = new A(1
$ob2 = new A(2
$cl = $ob1->getClosure(
echo $cl(), "\n";
$cl = $cl->bindTo($ob2
echo $cl(), "\n";
?>
上面的例子会输出类似于:
1
2
另请参阅
- 匿名功能
- Closure::bind() - 用特定的绑定对象和类范围复制闭包
← Closure::bind