php 判断是否闭包,php 闭包(closure)的使用

---(迁移自本人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++ 然后匿名函数会保存这些 ++之后的值,下次调用的时候,

就会使用保存的这些值来输出,而匿名函数外面却得不到这些值,这就是闭包的概念了。

现在终于可以理解了吧!

标签:闭包,closure,函数,function,printstr,echo,匿名,php

来源: https://www.cnblogs.com/willahuang/p/13363094.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值