php基于闭包实现函数的自调用(递归)实例分析


Posted in PHP onNovember 11, 2016

本文实例讲述了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.'<br />';
      //递归调用自己
      $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 相关文章推荐
PHP 和 MySQL 基础教程(二)
Oct 09 PHP
mac下使用brew配置环境的步骤分享
May 23 PHP
一漂亮的PHP图片验证码实例
Mar 21 PHP
ThinkPHP标签制作教程
Jul 10 PHP
PHP内存缓存Memcached类实例
Dec 08 PHP
PHP中实现获取IP和地理位置类分享
Feb 10 PHP
解决nginx不支持thinkphp中pathinfo的问题
Jul 21 PHP
thinkPHP中create方法与令牌验证实例浅析
Dec 08 PHP
php注册和登录界面的实现案例(推荐)
Oct 24 PHP
PHP工厂模式的日常使用
Mar 20 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
Apr 15 PHP
浅谈如何提高PHP代码质量之端到端集成测试
May 28 PHP
php使用高斯算法实现图片的模糊处理功能示例
Nov 11 #PHP
PHP实现的方程求解示例分析
Nov 11 #PHP
php5.3后静态绑定用法详解
Nov 11 #PHP
php基于curl实现的股票信息查询类实例
Nov 11 #PHP
PHP中STDCLASS用法实例分析
Nov 11 #PHP
php遍历替换目录下文件指定内容的方法
Nov 10 #PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
Nov 10 #PHP
You might like
ThinkPHP中Session用法详解
2014/11/29 PHP
typecho插件编写教程(三):保存配置
2015/05/28 PHP
PHP数组编码gbk与utf8互相转换的两种方法
2016/09/01 PHP
PHP简单实现冒泡排序的方法
2016/12/26 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
深入认识javascript中的eval函数
2009/11/02 Javascript
基于JQuery的动态删除Table表格的行和列的代码
2011/05/12 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
vue 将页面公用的头部组件化的方法
2017/12/18 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
基于游标的分页接口实现代码示例
2018/11/12 Javascript
深入理解JS异步编程-Promise
2019/06/03 Javascript
[07:57]DOTA2热力大趴狂欢夜 广州站活动回顾
2013/11/27 DOTA
Python中的fileinput模块的简单实用示例
2015/07/09 Python
Python中字典映射类型的学习教程
2015/08/20 Python
Python编码类型转换方法详解
2016/07/01 Python
python使用opencv进行人脸识别
2017/04/07 Python
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
Python 创建空的list,以及append用法讲解
2018/05/04 Python
Python中的字符串切片(截取字符串)的详解
2019/05/15 Python
对Django中内置的User模型实例详解
2019/08/16 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
2020/07/01 Python
基于HTML5 Canvas:字符串,路径,背景,图片的详解
2013/05/09 HTML / CSS
allbeauty美国:英国在线美容店
2019/03/11 全球购物
会计职业生涯规划书
2014/01/13 职场文书
ktv总经理岗位职责
2014/02/17 职场文书
竞选体育委员演讲稿
2014/04/26 职场文书
教师求职自荐书
2014/06/14 职场文书
预备党员期盼十八届四中全会召开思想汇报
2014/10/17 职场文书
党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
催款函范文
2015/06/24 职场文书
教你怎么用Python实现GIF动图的提取及合成
2021/06/15 Python
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python