看过很多关于PHP闭包的解释。每个文档想表达大致相同的意思,但又很难理解。我就结合自己的理解来描述一下,有更好的理解。请指出,大家都知道PHP的闭包是function()use(){};本文分为3步1:解释闭包的使用2:闭包实例3:闭包总结1,解释闭包的使用1:闭包中use的使用-第1部分function()use($param){};$param=1;$data=function()使用($param){var_dump($param);};$data();$param=2;$data();//输出结果为11个分析结果:use的用法等同于对象的用法(类的用法),$data()表示实例化一次,但是语言有textflow的特点,第二次$data()没有重新实例化,实例化的时候得到的值为1,所以输出结果就是上面的结果;2:在闭包中使用——第二部分$param=1;$data=function()use($param){var_dump($param);};$data();$param=2;$data=function()使用($param){var_dump($param);};$数据();//输出结果为12个分析结果:以文本流的形式,再次实例化变量所以存储的变量为2,最终输出为2;3:闭包中function()后的括号,use前的括号usagefunction($obj)use($param){};$参数=1;$data=function($obj)使用($param){var_dump($obj);变量转储($参数);};$数据(2);$数据(3);$参数=2;$数据(4);//输出213141分析结果:函数后面的括号相当于函数的用法,每次调用函数时传入相同的数据,每次都需要传入,并且它背后的用途意味着真实一个例子后它不会改变,所以obj可以随时改变2、闭包示例示例1:$arr=['米饭'=>['咸粥','甜粥','米饭'],'面条'=>['面条','花卷','包子'],];$参数='';$bag=函数($data)使用($param){$l=count($data);返回$data[rand(0,$l-1)];};$eat_arr=[];foreach($arras$key=>$value){$each_arr[]='Eat'.$key.':'.$bag($value);}echoimplode(',',$each_arr);//输出rice:rice,noodles:noodlesrice:sweetporridge,noodles:bunch例2:$arr=['rice'=>['saltyporridge','sweetporridge','Rice'],'noodles'=>['面条','花卷','包子'],];$eat_arr=[];foreach($arras$key=>$value){$bag=function()use($value){$l=count($value);返回$value[rand(0,$l-1)];};$each_arr[]='eat'.$key.':'.$bag();}echoimplode(',',$each_arr);//输出吃米饭:甜粥,吃面条:面条吃米饭:甜粥,吃面条:花卷与函数不同的是多了一个use中间值。使用时注意函数后面的()是可变变量,use()中的变量是实例使用一次后不会改变的变量。写在循环中闭包的方法用处不大,相当于每次都实例化,所以闭包的写法可以先定义一个方法来调用闭包和函数的真正区别:函数:一次封装多个调用。闭包:仅在该方法中使用,耦合度低到可以忽略。
