首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Closure::bindTo

(PHP 5 >= 5.4.0, PHP 7)

Closure::bindTo - 使用新的绑定对象和类范围复制闭包

描述

代码语言:javascript
复制
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

代码语言:javascript
复制
<?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";
?>

上面的例子会输出类似于:

代码语言:javascript
复制
1
2

另请参阅

  • 匿名功能
  • Closure::bind() - 用特定的绑定对象和类范围复制闭包

← Closure::bind

扫码关注腾讯云开发者

领取腾讯云代金券