PHP闭包(Closure)初探(转载 http://my.oschina.net/melonol/blog/126694?p=2#comments)
2016-03-03 19:06
381 查看
匿名函数
提到闭包就不得不想起匿名函数,也叫闭包函数(closures),貌似PHP闭包实现主要就是靠它。声明一个匿名函数是这样:?
?
实现闭包
将匿名函数在普通函数中当做参数传入,也可以被返回。这就实现了一个简单的闭包。下边有三个例子
?
连接闭包和外界变量的关键字:USE
闭包可以保存所在代码块上下文的一些变量和值。PHP在默认情况下,匿名函数不能调用所在代码块的上下文变量,而需要通过使用use关键字。换一个例子看看:
?
有人可能会想到,是否可以在匿名函数中改变上下文的变量,但我发现是不可以的:
?
要达到这种效果,其实在变量前加一个 & 符号就可以了:
?
根据描述改变一下上面的例子:
?
总结
PHP闭包的特性并没有太大惊喜,其实用CLASS就可以实现类似甚至强大得多的功能,更不能和js的闭包相提并论,只能期待PHP以后对闭包支持的改进。不过匿名函数还是挺有用的,比如在使用preg_replace_callback等之类的函数可以不用在外部声明回调函数了。
相关文章推荐
- Android OKHTTP
- Zigbee单播、组播、广播网络通信
- Android 异步网络请求导致的程序崩溃
- SDK6.0 API-23 Unable to find optional library: org.apache.http.legacy
- http在线测试工具
- 计算机网络名词解释
- 计算机网络——5.路由协议
- tera term通过ttl脚本 自动连接服务器(转自http://www.cnblogs.com/wxb0328/p/teraterm.html)
- Ubuntu下使用ISCSI+OCFS2实现网络存储及文件共享
- Swift网络请求
- http 415 Unsupported Media Type
- HttpServletRequest和HttpServletResponse
- okhttp的简单封装
- Android 检验当前网络是否可用
- 如何用 Retrofit 2 在安卓上实现 HTTP 访问?
- HTTP长连接与短连接
- jsoup 的用法网络爬虫
- 如何用 Retrofit 2 在安卓上实现 HTTP 访问?
- linux下使用yum安装jdk、mysql、tomcat、httpd
- 网络直播