php 匿名函数 $this,在PHP中如何为匿名函数指定this

论坛 期权论坛 脚本     
已经匿名di用户   2022-4-20 22:34   1816   0

9199b614398c55ea31a06e58fdcba10e.png

关于闭包匿名函数,在JS中有个很典型的问题就是要给它绑定一个 this 作用域。其实这个问题在PHP中也是存在的,比如下面这段代码:$func = function($say){

echo $this->name, ':', $say, PHP_EOL;

};

$func('good'); // Fatal error: Uncaught Error: Using $this when not in object context

在这个匿名函数中,我们使用了 $this->name 来获取当前作用域下的 $name 属性,可是,这个$this 是谁呢?我们并没有定义它,所以这里会直接报错。错误信息是:使用了 $this 但是没有对象上下文,也就是说没有指定 $this 引用的作用域。

1.bindTo() 方法绑定 $this$func = $func->bindTo($lily, 'Lily');

// $func = $func->bindTo($lily, Lily::class);

// $func = $func->bindTo($lily, $lily);

$func1('cool');

这回就可以正常输出了。 bindTo() 方法是复制一个当前的闭包对象,然后给它绑定 $this 作用域和类作用域。$lily 参数是一个object $newthis参数,也就是给这个复制出来的匿名函数指定 $this。

'Lily' 则是绑定一个新的 类作用域 ,它代表一个类型、决定在这个匿名函数中能够调用哪些 私有 和 受保护 的方法

如果不给这个参数,那么我们就不能访问这个 private 的 $name属性了:$func1 = $func->bindTo($lily);

$func1('cool2'); // Fatal error: Uncaught Error: Cannot access private property Lily::$name

2.call() 方法绑定 $this$func->call($lily, 'well'); // Lily:well

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP