加入收藏 | 设为首页 | 会员中心 | 我要投稿 鹰潭站长网 (https://www.0701zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP 闭包函数及Closure对象的总结

发布时间:2022-12-03 09:01:00 所属栏目:PHP教程 来源:转载
导读: 疑问
如果你在理解闭包函数的时候觉得比较费解,不如放一放,问自己一个问题:
面向对象编程语言对代码的复用主要采用继承来实现,那面向函数的代码复用能力通过什么来实现呢?
你可能第一

疑问

如果你在理解闭包函数的时候觉得比较费解,不如放一放,问自己一个问题:

面向对象编程语言对代码的复用主要采用继承来实现,那面向函数的代码复用能力通过什么来实现呢?

你可能第一时间想到的是 函数嵌套,就是通过独立子函数来组织代码。那类似PHP里面的array_walk()、array_udiff()这些函数怎么实现呢?是不是觉得,有了匿名函数,array_walk()、array_udiff()这两个函数才可能得到这么好的复用?

所以按照最基础的理解来总结,我个人认为 闭包函数 的主要目的是为了 函数复用 而设计的,如果某个语言不支持闭包函数,那再函数复用的能力上就会差一些,但是通过类的面向接口来编程,也可以很好的复用代码的,所以一切根源都是为了代码复用。

之所以闭包函数这么难理解,我觉得是网上太多帖子根据闭包函数的能力做了很多各种各样的例子,譬如怎么不用写for循环,怎么动态给类添加函数,这些的确是闭包函数的能力之一,但是比不是闭包函数设计的根源,所以会误导读者,让读者更不了解闭包函数。更好的理解方式应该是逆过来,先了解为什么需要闭包函数,闭包函数是怎么工作的,然后在来理解闭包函数有哪些应用场景。

总的来理解,我以为,PHP里面闭包函数是为了复用函数而设计的语言特性,类似javascript等具有面向函数的编程语言一样,可以在闭包函数里面访问指定域的变量,在PHP里使用use关键字来实现。

Closure

PHP具有面向函数的编程特性,但是也是面向对象编程语言,PHP 会自动把闭包函数转换成内置类 Closure 的对象实例,依赖Closure 的对象实例又给闭包函数添加了更多的能力。

例如Closure 的两个函数:

Closure::bind — 复制一个闭包,绑定指定的this对象和类作用域。Closure::bindTo—复制当前闭包对象,绑定指定的 this对象和类作用域。

这两个函数的文字描述好让人费解,直白一点可以这样理解,通过这两个函数,可以指定闭包函数里 $this 变量的指向,和指明闭包函数的作用域。

具体底层怎么控制这个作用域就还没时间去看,不过知道作用域的概念就好。

好了,了解了基本意图就可以看看例子了,这方面例子太多PHP函数,自己就不写了:

(编辑:鹰潭站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!