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

疑问

如果你在理解闭包函数的时候觉得比较费解,不如放一放,问自己一个问题:
面向对象编程语言对代码的复用主要采用继承来实现,那面向函数的代码复用能力通过什么来实现呢?

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

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

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

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

Closure

PHP具有面向函数的编程特性,但是也是面向对象编程语言,PHP 会自动把闭包函数转换成内置类 Closure 的对象实例,依赖Closure 的对象实例又给闭包函数添加了更多的能力。
例如Closure 的两个函数:
Closure::bind — 复制一个闭包,绑定指定的 thisClosure::bindTo this对象和类作用域。

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

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

好了,了解了基本意图就可以看看例子了,这方面例子太多,自己就不写了:
http://blog.csdn.net/wuxing26jiayou/article/details/51067190
http://www.cnblogs.com/yjf512/archive/2012/10/29/2744702.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值