PHP函数闭包

来源:互联网 发布:mud游戏编程 编辑:程序博客网 时间:2024/06/01 09:01

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,今天晚上就写到这里,大家晚安~~~

原创粉丝点击