PHP函数闭包

PHP的闭包函数和JS的闭包是一样的道理,都是函数内部的函数,同样的闭包会保存函数内的变量,以方便下次的使用。但是也会有执行次数越多,占用内存越多,造成内存泄漏的现象。
接下来我们举个例子来说明一下PHP的闭包,代码如下:
例1:

function getFunc(){
    $array = array();
    for($i = 0;$i<10;$i++){
        $array[$i] = function(){
            return "10";
        };
    }
    print_r($array);
    return $array;
}
$funcArray = getFunc();
echo $funcArray[0]();

首先我们大家看看,这里调用函数之后,会echo出来什么值呢,答案是10。
我来解释一下原因:
1️⃣ 在函数内部,定义了一个数组,然后经过了一个for循环之后,数组中的值变成了一个长度为9的闭包函数对象的数组,打印出来是这样的
这里写图片描述
2️⃣ 然后我们定义的函数就把这个闭包函数数组返回了出来,用变量接收了返回值之后,进行调用了数组中的第一个数组,得出的结果自然就是数组中函数的返回值,也就是return出来的值。
这样一解释,加上输出的图片,是不是就好理解很多了。



嗨嗨,那我们再来看一个例子,是从上一个例子中衍生出来的一个例子,代码如下:

function getFun(){
    $array1 = array();
    for($i = 0;$i<10;$i++){
        $array1[$i] = function()use($i){
            return 10 + $i;
        };
    }
    print_r($array1);
    return $array1;
}
$funcArray1 = getFun();
echo $funcArray1[9]();

细心的小伙伴一定发现这个例子与上个例子的不同了吧,哈哈,没错就是内部函数后面的那个use()那里,还有内部函数的返回值不一样了,所以大家猜这个函数最后的输出结果会是多少呢,哒哒哒,我猜是19,你们呢?
打印出来看看啊,哈哈~
这里写图片描述
哈哈,果然是19,解释一下原因:
1️⃣ 相信小伙伴们已经看到上图中的那一坨了,加了use之后,相当于使用了外部变量,然后使得函数返回出来的函数变成了具有静态键值的数组,并且这些键值保存了i所变化的值
2️⃣ 所以当我们在外部再次调用这个函数的时候,这些值还保存在函数内部,因此我们代码中调用了数组中第九个函数,内部函数的返回值就会加上对应保存的9,最终返回19。

呼呼,闭包的这两个例子,小伙们要好好看看哦,理解投了,就会觉得其实PHP的闭包跟JS的大同小异,ok,今天晚上就写到这里,大家晚安~~~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值