温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PHP中怎么为匿名函数指定this

发布时间:2021-07-14 13:53:45 来源:亿速云 阅读:148 作者:Leah 栏目:大数据

这篇文章给大家介绍PHP中怎么为匿名函数指定this,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

 

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

在之前的文章中,我们已经学习过匿名函数的使用,没有看过的小伙伴可以进入传送门先去了解下闭包匿名函数的用法,传送:还不知道PHP有闭包?那你真OUT了。

关于闭包匿名函数,在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 引用的作用域。

 

bindTo() 方法绑定 $this

好吧,那么我们就给它一个作用域,和 JS 一样,使用一个 bindTo() 方法即可。

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

这回就可以正常输出了。bindTo() 方法是复制一个当前的闭包对象,然后给它绑定 $this 作用域和类作用域。其中, $lily 参数是一个 object $newthis 参数,也就是给这个复制出来的匿名函数指定 $this 。而第二个参数 'Lily' 则是绑定一个新的 类作用域 ,它代表一个类型、决定在这个匿名函数中能够调用哪些 私有 和 受保护 的方法,上例中给出的三种方式都可以用来定义这个参数。如果不给这个参数,那么我们就不能访问这个 private 的 $name 属性了:

$func2 = $func->bindTo($lily);
$func2('cool2'); // Fatal error: Uncaught Error: Cannot access private property Lily::$name
   

call() 方法绑定 $this

在PHP7以后,PHP新增加了 call() 方法来进行匿名函数的 $this 绑定,我们来看看它和 bindTo() 方法有哪些区别。

$func->call($lily, 'well'); // Lily:well


关于PHP中怎么为匿名函数指定this就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI