在线文档教程
PHP
类和函数 | Classes and Functions

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.0newscope不能作为一个内部类的对象,在这个版本之前有可能是什么。

示例

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

Closure::call →