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 相关文章推荐
Windows2003 下 MySQL 数据库每天自动备份
Dec 21 PHP
PHP5中的时间相差8小时的解决办法
Mar 28 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
Aug 01 PHP
PHP下常用正则表达式整理
Oct 26 PHP
php 文件缓存函数
Oct 08 PHP
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
Oct 31 PHP
多个PHP中文字符串截取函数
Nov 12 PHP
ThinkPHP实现ajax仿官网搜索功能实例
Dec 02 PHP
PHP中mysqli_affected_rows作用行数返回值分析
Dec 26 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
Dec 21 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
Jun 05 PHP
PHP快速排序quicksort实例详解
Sep 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
Php图像处理类代码分享
2012/01/19 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
javascript跨域刷新实现代码
2011/01/01 Javascript
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
使用JavaScript 实现对象 匀速/变速运动的方法
2013/05/08 Javascript
js控制table合并具体实现
2014/02/20 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
js跨域请求数据的3种常用的方法
2015/12/01 Javascript
浅析JavaScript中的array数组类型系统
2016/07/18 Javascript
如何用JS判断两个数字的大小
2016/07/21 Javascript
AngularJS中的表单简单入门
2016/07/28 Javascript
深入解析Vue 组件命名那些事
2017/07/18 Javascript
Vue项目中设置背景图片方法
2018/02/21 Javascript
详解vue项目打包后通过百度的BAE发布到网上的流程
2018/03/05 Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
2018/07/24 jQuery
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
[01:20]PWL开团时刻DAY9——听说潮汐没用?
2020/11/10 DOTA
Python批量修改文件后缀的方法
2014/01/26 Python
python距离测量的方法
2018/03/06 Python
django使用admin站点上传图片的实例
2019/07/28 Python
Python 装饰器原理、定义与用法详解
2019/12/07 Python
python获取百度热榜链接的实例方法
2020/08/25 Python
python 从list中随机取值的方法
2020/11/16 Python
css3media响应式布局实例
2016/07/08 HTML / CSS
基于HTML5 FileSystem API的使用介绍
2013/04/24 HTML / CSS
意大利奢侈品网站:Italist
2016/08/23 全球购物
美国波西米亚风格精品店:South Moon Under
2019/10/26 全球购物
自荐信格式技巧有哪些呢
2013/11/19 职场文书
电子商务专业个人的自我评价
2013/12/19 职场文书
医院护士见习期自我鉴定
2014/09/15 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
情况说明书怎么写
2015/10/08 职场文书
Ruby序列化和持久化存储 Marshal和Pstore介绍
2022/04/18 Ruby