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的FTP学习(三)
Oct 09 PHP
PHP gbk环境下json_dencode传送来的汉字
Nov 13 PHP
PHP实现的简单日历类
Nov 29 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
Jun 06 PHP
PHP常用的三种设计模式
Feb 17 PHP
PDO::errorCode讲解
Jan 28 PHP
PHP安装memcache扩展的步骤讲解
Feb 14 PHP
laravel model 两表联查示例
Oct 24 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
Feb 27 PHP
Yii框架组件的事件机制原理与用法分析
Apr 07 PHP
php模拟实现斗地主发牌
Apr 22 PHP
详解PHP用mb_string处理windows中文字符
May 26 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
PHP配置心得包含MYSQL5乱码解决
2006/11/20 PHP
php数组应用之比较两个时间的相减排序
2008/08/18 PHP
详解PHP中的状态模式编程
2015/08/11 PHP
YII框架学习笔记之命名空间、操作响应与视图操作示例
2019/04/30 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
JSON 学习之完全手册 图文
2007/05/29 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
jquery easyui中treegrid用法的简单实例
2014/02/18 Javascript
jQuery基础知识小结
2014/12/22 Javascript
js获取内联样式的方法
2015/01/27 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
通过bootstrap全面学习less
2016/11/09 Javascript
BootStrap实现轮播图效果(收藏)
2016/12/30 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
vue element 中的table动态渲染实现(动态表头)
2019/11/21 Javascript
Python实现拷贝/删除文件夹的方法详解
2018/08/29 Python
Django实现从数据库中获取到的数据转换为dict
2020/03/27 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
python中判断文件结束符的具体方法
2020/08/04 Python
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
Clearly澳大利亚:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
测绘工程系学生的自我评价
2013/11/30 职场文书
公积金转移接收函
2014/01/11 职场文书
毕业生应聘求职信
2014/07/10 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
2014房屋登记授权委托书
2014/10/13 职场文书
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
大学学生个人总结
2015/02/15 职场文书
大学生自我推荐信范文
2015/03/24 职场文书
CSS3鼠标悬浮过渡缩放效果
2021/04/17 HTML / CSS
使用canvas对video视频某一刻截图功能
2021/09/25 HTML / CSS
win10音频服务未响应怎么解决?win10音频服务未响应未修复的解决方法
2022/08/14 数码科技