PHP的闭包可能不常用,但是在某些场合之下还是可以考虑用php的闭包来实现某些功能的,比如递归,这里讲一下用php的闭包实现递归

//php闭包实现函数的自调用,也就是实现递归

function closure($n,$counter,$max){

//匿名函数,这里函数的参数加&符号是,引址调用参数自己

$fn = function (&$n,&$counter,&$max=1) use(&$fn){//use参数传递的是函数闭包函数自身

$n++;

if($n < $max){//递归点,也就是递归的条件

$counter .=$n.'
';

//递归调用自己

$fn($n,$counter,$max);

}

return $counter;

};//记得这里必须加``;``分号,不加分号php会报错,闭包函数

/*

*这里函数closure的返回值就是调用闭包的匿名函数

*而闭包函数,引用closure函数传进来的参数

*/

return $fn($n,$counter,$max);

}

echo (closure(0,'',10));

这是一个简单的使用php闭包实现递归的函数,其实,假如我们对这个函数稍微修改一下,是可以实现很多功能的,比如说,无限极分类。

关于里面的闭包函数,其实,我们也可以不用引用外面的closure参数,里面的闭包函数的参数,我们可以在closure的内部设置。

我们也可以不用返回闭包函数的值,因为闭包函数是在closure函数里面,我们可以在closure里面设置一下变量传递给闭包函数,然后,用闭包递归获取我们想要的东西存储在数组中,再利用closure函数返回闭包函数获取的东西,所以,闭包函数也可以没有返回值的,关键是你要获取什么东西。

总之,你只要利用这个闭包函数实现你要的东西,然后返回你需要的东西即可,不一定非要从闭包函数的返回值中获取。

php 递归函数自调用函数,PHP闭包实现函数的自调用实现递归相关推荐

  1. python高阶函数闭包装饰器_5.初识python装饰器 高阶函数+闭包+函数嵌套=装饰器...

    一.什么是装饰器? 实际上装饰器就是个函数,这个函数可以为其他函数提供附加的功能. 装饰器在给其他函数添加功能时,不会修改原函数的源代码,不会修改原函数的调用方式. 高阶函数+函数嵌套+闭包 = 装饰 ...

  2. JavaScript 匿名函数与闭包

    匿名函数与闭包 匿名函数 闭包 概念 相关知识点 闭包中的this 循环函数中的匿名函数和闭包 循环函数中的匿名函数 循环函数中的闭包 模仿块级作用域 私有变量 静态私有变量 匿名函数 没有函数名的函 ...

  3. javascript进阶课程--第三章--匿名函数和闭包

    javascript进阶课程--第三章--匿名函数和闭包 一.总结 二.学习要点 掌握匿名函数和闭包的应用 三.匿名函数和闭包 匿名函数 没有函数名字的函数 单独的匿名函数是无法运行和调用的 可以把匿 ...

  4. 【Rust深入浅出-7】函数与闭包

    [Rust深入浅出-7]函数与闭包 第一章Hello World! 第二章 变量和基本数据类型 第三章 运算符 第四章 类型转换 第五章 拓展数据类型 第六章 控制流 第七章 函数与闭包 文章目录 [ ...

  5. 好好学python·函数进阶(递归函数,回调函数,闭包函数,匿名函数,迭代器)

    函数进阶 递归函数 回调函数 闭包函数 特点 匿名函数 lambda 表达式 迭代器 iter() next() 迭代器的取值方案 迭代器取值特点,取一个少一个,直到都取完,最后再获取就会报错 检测迭 ...

  6. 函数类型:有参函数、无参函数、匿名函数、回调函数、立即执行函数、闭包函数、递归函数...

    1.有参函数:函数定义时,带有参数的函数 设置函数参数的默认值: (1)直接在函数定义位置的小括号内进行赋值 (2)低版本默认值的处理(在函数内部判断该参数是否有默认值,若没有,赋值初始值) 第1种默 ...

  7. ES6/04/严格模式,开启严格模式,严格模式与普通模式对比发生了那些变化,高阶函数,闭包函数,递归函数,递归实例(1,阶乘,2,斐波那契数列,3,根据id返回对应数据对象),浅拷贝和深拷贝

    函数 开启严格模式 1,用 " use strict"; 语句为整个脚本(即:script标签)开启严格模式;在<script>标记的第一行写上"use st ...

  8. js 闭包和函数自调用方法

    1.函数自调用方法 (function () {altert("页面一加载自动调用"): })(); 2.闭包:函数内的参数数据外部不可以访问,通过返回子函数操作闭包中的数据 举例 ...

  9. Scala基础教程(五):函数、闭包

    函数是一组一起执行任务的语句.可以将代码放到独立的功能.如何划分你的代码不同功能之间,但在逻辑上,划分通常是让每个函数执行特定的任务. Scala有函数和方法,我们术语说的方法和函数互换用微小的差别. ...

最新文章

  1. Windchill的web中的Spring
  2. zoj 2709 Lottery 组合数,概率,贪心 (8-F)
  3. 自动增益控制AGC的simulink仿真
  4. image打开rgb16 qt_QT中显示图像数据
  5. LeetCode 1216. 验证回文字符串 III(DP)
  6. Bootstrap 3 加半星 Star rating with half-stars
  7. REST API 的安全认证,我放弃OAuth 2.0 ,选择 JWT 令牌
  8. 《精通JavaScript》总结
  9. java坦克大战图片素材包_坦克大战图片素材
  10. 最小二乘支持向量机--LSSVM分类及MATLAB代码实现
  11. gn: toolchain
  12. 芯片流片(晶圆制造)工艺服务的流程。 细节详解连载
  13. SIEBEL代码分析
  14. 光纤跳线接口_2分钟让你搞懂跳线架和配线架的区别
  15. no default constructor found either
  16. SAP中物料质检过程中检验批/物料凭证/过账变更通知之间的业务关联图
  17. 七彩虹主板进BIOS设置和打开启动项菜单快捷键
  18. 什么是计算机立体化教程,全国计算机等级考试立体化应试教程
  19. python联网斗地主_Python斗地主
  20. 全国计算机等级考试照片多大的,2018年全国计算机等级考试报名照片要求

热门文章

  1. DC保存至BMP图像
  2. C#中Socket通信编程的同步实现
  3. 手机反编译java源码,再现反编译神器ShowJava,支持反编译出java源码
  4. 程序员基本功05表达式中的陷阱
  5. 外网服务器搭建网站并获取域名教程
  6. Qt没有被正确安装,请运行make install问题的解决
  7. 中国石油计算机第二次在线作业,中国石油大学(北京)计算机应用基础第二次在线作业1教程.docx...
  8. pythonrecord 51 net_python与c#的交互模块pythonnet
  9. HDU - 6126 Give out candies
  10. iOS 多线程:『GCD』详尽总结