摘要:闭包与函数真正的区别函数封装一次多处调用。闭包只限于本方法使用,耦合度低到忽略。
看过许多关于PHP中闭包的讲解,每个文档想要表达的意思大体相同,但是理解起来很费劲,我根据自身理解加以描述,有更好的理解请指出
众所周知,大家都知道PHP的闭包是function () use (){};
本文分为3步
1:讲解闭包的使用
2:闭包实例
3:闭包总结
1、讲解闭包的使用
1:闭包中的use使用-上篇
function () use($param){};
$param = 1; $data = function () use ($param) { var_dump($param); }; $data(); $param = 2; $data(); // 输出结果为 1 1
分析结果:use的用法相当于对象(类的用法),$data(),表示实例化一次,然而语言有着文本流的特性,第二次$data()没有重新实例,实例的时候取到的值是1,所以输出结果为上面结果;
2:闭包中的use使用-下篇
$param = 1; $data = function () use ($param) { var_dump($param); }; $data(); $param = 2; $data = function () use ($param) { var_dump($param); }; $data(); // 输出结果为 1 2
分析结果:文本流的形式,又实例化一次变量所以存储变量为2,最终输出为2;
3:闭包中function()后面的括号,use前面的括号用法
function ($obj) use($param){};
$param = 1; $data = function ($obj) use ($param) { var_dump($obj); var_dump($param); }; $data(2); $data(3); $param = 2; $data(4); // 输出 2 1 3 1 4 1
分析结果:function后面的括号相当于函数的用法,每次调用函数时传入数据一样,每次都需要传入,后面的use表示实例一次后不变,所以obj随时改变。
2、闭包实例
例子1:
$arr = [ "米" => ["咸粥", "甜粥", "米饭"], "面" => ["面条", "花卷", "馒头"], ]; $param = ""; $bag = function ($data) use ($param) { $l = count($data); return $data[rand(0, $l-1)]; }; $eat_arr = []; foreach ($arr as $key => $value) { $each_arr[] = "吃".$key.":".$bag($value); } echo implode(",", $each_arr); // 输出 吃米:米饭, 吃面:面条 吃米:甜粥, 吃面:馒头
例子2:
$arr = [ "米" => ["咸粥", "甜粥", "米饭"], "面" => ["面条", "花卷", "馒头"], ]; $eat_arr = []; foreach ($arr as $key => $value) { $bag = function () use ($value) { $l = count($value); return $value[rand(0, $l-1)]; }; $each_arr[] = "吃".$key.":".$bag(); } echo implode(",", $each_arr); // 输出 吃米:甜粥, 吃面:面条 吃米:甜粥, 吃面:花卷
3、闭包总结
闭包总结到最后,就是与函数不同的地方就是多加了一个use中间值,使用的时候注意一点是function后面的()为可变变量,use()里面的变量为实例一次后不改动的变量,循环里面写闭包这种方法不是很好用,相当于每次都实例,所以闭包的写法可以先定义一个方法在调用。
闭包与函数真正的区别:
函数:封装一次多处调用。 闭包:只限于本方法使用,耦合度低到忽略。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/31208.html
摘要:当初看这个解释有点懵逼,理解成闭包就是函数中的函数了。里的闭包最近不满足于只干前端的活,开始用起了。里的闭包最近在学习语言,让我们来看一下语言里的闭包。在中,闭包特指将函数作为值返回的情况,被返回的函数引用了生成它的母函数中的变量。 本人开始接触编程是从js开始的,当时网上很多人说闭包是难点,各种地方对闭包的解释也是千奇百怪。如今开始接触js以外的各种编程语言,发现不光是js,php、...
摘要:当初看这个解释有点懵逼,理解成闭包就是函数中的函数了。里的闭包最近不满足于只干前端的活,开始用起了。里的闭包最近在学习语言,让我们来看一下语言里的闭包。在中,闭包特指将函数作为值返回的情况,被返回的函数引用了生成它的母函数中的变量。 本人开始接触编程是从js开始的,当时网上很多人说闭包是难点,各种地方对闭包的解释也是千奇百怪。如今开始接触js以外的各种编程语言,发现不光是js,php、...
摘要:用匿名函数的好处在于,这个服务绑定到容器以后,并不会立即产生服务最终的对象,只有在这个服务解析的时候,匿名函数才会执行,此时才会产生这个服务对应的服务实例。 前言 老实说,第一次老大让我看laravel框架手册的那天早上,我是很绝望的,因为真的没接触过,对我这种渣渣来说,laravel的入门门槛确实有点高了,但还是得硬着头皮看下去(虽然到现在我还有很多没看懂,也没用过)。 后面慢...
摘要:原因如下短闭包的目的是为了减少冗余。然而,的创建者认为,如果你要处理的是多行表达式的函数,那么使用闭包获得的益处就更少了。这意味着你可以改变短闭包内的变量,但它不会对外部作用域中的变量产生影响。 showImg(https://segmentfault.com/img/remote/1460000019117465?w=722&h=350);短闭包,也叫做箭头函数,是一种用 php 编...
摘要:前言腾讯一面,相比阿里一面来说,腾讯一面先给打电话预定时间,这也给了我们这些面试者去准备的时间。其实闭包也就是指有权访问另一个函数作用域的函数而已。常用的创建闭包的方法就是在函数内部创建另一个函数。 前言 腾讯一面,相比阿里一面来说,腾讯一面先给打电话预定时间,这也给了我们这些面试者去准备的时间。但是也正是因为这种确定性,也有在等待电话的时候的心情的忐忑。 背景 我是一名大三学生,大一...
阅读 3168·2019-08-30 15:55
阅读 2947·2019-08-30 13:46
阅读 1447·2019-08-29 17:29
阅读 3515·2019-08-29 11:08
阅读 3440·2019-08-29 11:04
阅读 1089·2019-08-28 18:20
阅读 547·2019-08-26 13:37
阅读 1329·2019-08-26 11:49