首页 / PHP / php 闭包(closure)的使用
php 闭包(closure)的使用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php 闭包(closure)的使用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2623字,纯文字阅读大概需要4分钟。
内容图文
![php 闭包(closure)的使用](/upload/InfoBanner/zyjiaocheng/628/45b3a64e6a984f578053f012ddcce490.jpg)
---(迁移自本人2015-08-14 10:36:06 日的新浪博客日志)
以前写的一堆东西放在博客格式也不对,现在全部迁移过来。
php的闭包或许我从来没去注意过,php还有这个用法。互联网在不断的更新,我们也要跟上自己的脚步,虽然说对你写程序是不是帮助特别大,或者用得多不多,这些都不必要去考虑,至少它存在了,我们要知道就可以了,至于你用或者不用,在于你了。
? 自上回因空余时间看了看python语言(),其中讲到了闭包的概念,python定义万物归一,一切皆对象的概念。 那么函数也是一个对象,所以可以作为某个函数的返回结果。想想这个闭包也是那么回事呀, 突然想想那php有没有闭包呢,后来一查找还真的有。编程的概念都是统一的,这就是计算机语言之间的想通之处呀! ? 那么php的闭包是怎么一回事呢?那我们来说说吧 ? php的闭包(closure)也就是匿名函数,php5.3引入的。说起匿名函数,好像还是比较耳熟的,这就来了兴趣了。 ? php匿名函数的语法很简单,$a = function(){ }; //带结束符号看到以上代码,你应该就能理解为何叫匿名函数了吧,声明一个没有名字的函数。如果想使用它,需要将其返回给一个$a变量。 匿名函数也可以像普通函数一样,声明参数, 调用方法也相同:
$a = function($param){ echo $param; }; $a('some string');输出:
some string? 在引入闭包之前,貌似这样的使用方法并不是很好用,所以用的人也比较少。那么怎么实现闭包呢? 闭包就是:将匿名函数在普通函数当中当做参数传入,也可以被返回,这样就形成了一个简单的闭包 ?
//在函数里定义一个匿名函数并且调用它 function printstr(){ $a = function( $str){ echo $str; }; $a( 'some string' ); } printstr();? 也可以这样使用 ?
//在函数里返回一个匿名函数,并且调用它 function printstr( ){ $a = function( $str ){ echo $str; } return $a; } $b = printstr(); $b( 'some string' );
闭包还可以使用外界变量,连接外界变量的关键字: use ?
function printstr(){ $c = 5; $a = function ( $str ) use ( $c){ $b = $a + $c; echo $b; $c ++; } $a(4); echo $c; } printstr();
输出:
9 4
我们可以看到使用use的$c 是可以 在匿名函数中使用用的,但是 $c的值并没有因为在匿名函数中 $c ++ 而改变, 其实匿名函数中只是使用了$c的一个副本而已,如果想完全引用$c 呢?只需要加一个 & 符号即可
function printstr(){ $c = 5; $a = function ( $str ) use (& $c){ $b = $a + $c; echo $b; $c ++; } $a(4); echo $c; } printstr();
输出:
9 5
? 这样匿名函数就可以改变外界的变量了,如果将匿名函数返回给外界,匿名函数会保存use 所引用的变量,而外界则不能得到这些变量,这样就形成为在你面函数里面的 ‘闭包’概念了,这样闭包的概念就清晰可见了。
function printstr(){ $c = 5; $a = function ( ) use (& $c){ echo $c; $c ++; } return $a; } $getParam = printstr(); $getParam( ); $getParam( ); $getParam( );输出:
5 6 7
可以看到外界的$c 的值还是5,但是在匿名函数里面都每次$c++ 然后匿名函数会保存这些 ++之后的值,下次调用的时候, 就会使用保存的这些值来输出,而匿名函数外面却得不到这些值,这就是闭包的概念了。 ? 现在终于可以理解了吧! ? ?
内容总结
以上是互联网集市为您收集整理的php 闭包(closure)的使用全部内容,希望文章能够帮你解决php 闭包(closure)的使用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。