php 递归函数自调用函数,PHP闭包实现函数的自调用实现递归
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闭包实现函数的自调用实现递归相关推荐
- python高阶函数闭包装饰器_5.初识python装饰器 高阶函数+闭包+函数嵌套=装饰器...
一.什么是装饰器? 实际上装饰器就是个函数,这个函数可以为其他函数提供附加的功能. 装饰器在给其他函数添加功能时,不会修改原函数的源代码,不会修改原函数的调用方式. 高阶函数+函数嵌套+闭包 = 装饰 ...
- JavaScript 匿名函数与闭包
匿名函数与闭包 匿名函数 闭包 概念 相关知识点 闭包中的this 循环函数中的匿名函数和闭包 循环函数中的匿名函数 循环函数中的闭包 模仿块级作用域 私有变量 静态私有变量 匿名函数 没有函数名的函 ...
- javascript进阶课程--第三章--匿名函数和闭包
javascript进阶课程--第三章--匿名函数和闭包 一.总结 二.学习要点 掌握匿名函数和闭包的应用 三.匿名函数和闭包 匿名函数 没有函数名字的函数 单独的匿名函数是无法运行和调用的 可以把匿 ...
- 【Rust深入浅出-7】函数与闭包
[Rust深入浅出-7]函数与闭包 第一章Hello World! 第二章 变量和基本数据类型 第三章 运算符 第四章 类型转换 第五章 拓展数据类型 第六章 控制流 第七章 函数与闭包 文章目录 [ ...
- 好好学python·函数进阶(递归函数,回调函数,闭包函数,匿名函数,迭代器)
函数进阶 递归函数 回调函数 闭包函数 特点 匿名函数 lambda 表达式 迭代器 iter() next() 迭代器的取值方案 迭代器取值特点,取一个少一个,直到都取完,最后再获取就会报错 检测迭 ...
- 函数类型:有参函数、无参函数、匿名函数、回调函数、立即执行函数、闭包函数、递归函数...
1.有参函数:函数定义时,带有参数的函数 设置函数参数的默认值: (1)直接在函数定义位置的小括号内进行赋值 (2)低版本默认值的处理(在函数内部判断该参数是否有默认值,若没有,赋值初始值) 第1种默 ...
- ES6/04/严格模式,开启严格模式,严格模式与普通模式对比发生了那些变化,高阶函数,闭包函数,递归函数,递归实例(1,阶乘,2,斐波那契数列,3,根据id返回对应数据对象),浅拷贝和深拷贝
函数 开启严格模式 1,用 " use strict"; 语句为整个脚本(即:script标签)开启严格模式;在<script>标记的第一行写上"use st ...
- js 闭包和函数自调用方法
1.函数自调用方法 (function () {altert("页面一加载自动调用"): })(); 2.闭包:函数内的参数数据外部不可以访问,通过返回子函数操作闭包中的数据 举例 ...
- Scala基础教程(五):函数、闭包
函数是一组一起执行任务的语句.可以将代码放到独立的功能.如何划分你的代码不同功能之间,但在逻辑上,划分通常是让每个函数执行特定的任务. Scala有函数和方法,我们术语说的方法和函数互换用微小的差别. ...
最新文章
- Windchill的web中的Spring
- zoj 2709 Lottery 组合数,概率,贪心 (8-F)
- 自动增益控制AGC的simulink仿真
- image打开rgb16 qt_QT中显示图像数据
- LeetCode 1216. 验证回文字符串 III(DP)
- Bootstrap 3 加半星 Star rating with half-stars
- REST API 的安全认证,我放弃OAuth 2.0 ,选择 JWT 令牌
- 《精通JavaScript》总结
- java坦克大战图片素材包_坦克大战图片素材
- 最小二乘支持向量机--LSSVM分类及MATLAB代码实现
- gn: toolchain
- 芯片流片(晶圆制造)工艺服务的流程。 细节详解连载
- SIEBEL代码分析
- 光纤跳线接口_2分钟让你搞懂跳线架和配线架的区别
- no default constructor found either
- SAP中物料质检过程中检验批/物料凭证/过账变更通知之间的业务关联图
- 七彩虹主板进BIOS设置和打开启动项菜单快捷键
- 什么是计算机立体化教程,全国计算机等级考试立体化应试教程
- python联网斗地主_Python斗地主
- 全国计算机等级考试照片多大的,2018年全国计算机等级考试报名照片要求
热门文章
- DC保存至BMP图像
- C#中Socket通信编程的同步实现
- 手机反编译java源码,再现反编译神器ShowJava,支持反编译出java源码
- 程序员基本功05表达式中的陷阱
- 外网服务器搭建网站并获取域名教程
- Qt没有被正确安装,请运行make install问题的解决
- 中国石油计算机第二次在线作业,中国石油大学(北京)计算机应用基础第二次在线作业1教程.docx...
- pythonrecord 51 net_python与c#的交互模块pythonnet
- HDU - 6126 Give out candies
- iOS 多线程:『GCD』详尽总结