在PHP中如何为匿名函数指定this?

23次阅读
没有评论

在PHP中,可以使用bindTo方法来为匿名函数指定$this对象。

示例代码如下:

class MyClass {
    private $value = 1;

    public function calc($callback) {
        return $callback();
    }
}

$myObject = new MyClass();

// 使用bindTo方法绑定$this对象
$myCallback = function() {
    return $this->value + 1;
};

$boundCallback = $myCallback->bindTo($myObject, 'MyClass');

echo $myObject->calc($boundCallback); // 输出 2

在这个例子中,我们首先定义了一个MyClass类,其中包含一个私有属性value和一个calc方法。calc方法接受一个回调函数作为参数,并将回调函数执行结果返回。

接下来,我们创建了一个$myObject对象,并使用匿名函数定义了$myCallback函数。注意,在$myCallback函数中,我们使用了$this->value来访问$value属性。由于这是一个匿名函数,没有指定$this对象,因此默认情况下,$this指向的是全局作用域,而不是$myObject对象。

为了解决这个问题,我们使用了$myCallback->bindTo方法,将$myObject对象绑定到$myCallback函数中。这意味着$myCallback函数中的$this指向$myObject对象,而不是全局作用域。绑定完成后,我们将绑定后的函数存储在$boundCallback变量中。

最后,我们将$boundCallback函数作为参数传递给了calc方法,并输出了calc方法的返回值。由于$boundCallback函数中的$this指向了$myObject对象,所以执行$boundCallback函数时,可以正确访问$value属性的值。因此,程序输出了2。

正文完
 
评论(没有评论)