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下利用header()函数设置浏览器缓存的代码
Sep 01 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
Jul 12 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
Jul 08 PHP
php基于socket实现SMTP发送邮件的方法
Mar 05 PHP
php通过array_merge()函数合并两个数组的方法
Mar 18 PHP
PHP判断是否为空的几个函数对比
Apr 21 PHP
ThinkPHP表单数据智能写入create方法实例分析
Sep 27 PHP
学习php设计模式 php实现工厂模式(factory)
Dec 07 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
Oct 11 PHP
php 无限分类 树形数据格式化代码
Oct 11 PHP
Laravel框架实现redis集群的方法分析
Sep 14 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
Sep 02 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提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
PHP 7的一些引人注目的新特性简单介绍
2015/11/08 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
2015/11/15 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
PHP中类的继承和用法实例分析
2016/05/24 PHP
myeclipse安装jQuery插件的方法
2011/03/29 Javascript
jQuery.position()方法获取不到值的安全替换方法
2015/03/13 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
2016/04/18 Javascript
JQuery的attr 与 val区别
2016/06/12 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
2016/06/14 Javascript
VUE中v-model和v-for指令详解
2017/06/23 Javascript
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
详解基于Vue-cli搭建的项目如何和后台交互
2018/06/29 Javascript
深入理解JavaScript的值传递和引用传递
2018/10/24 Javascript
JS实现计算小于非负数n的素数的数量算法示例
2019/02/26 Javascript
浅析Python多线程下的变量问题
2015/04/28 Python
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
django中的setting最佳配置小结
2017/11/21 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
Python 日期区间处理 (本周本月上周上月...)
2019/08/08 Python
python中round函数如何使用
2020/06/19 Python
详解CSS3伸缩布局盒模型Flex布局
2018/08/20 HTML / CSS
英国门把手公司:Door Handle Company
2019/05/12 全球购物
澳大利亚床上用品、浴巾和家居用品购物网站:Bambury
2020/04/16 全球购物
巴西购物网站:Onofre Agora
2020/06/08 全球购物
考试作弊检讨书大全
2014/02/18 职场文书
合作协议书格式
2014/08/19 职场文书
如何写贫困证明申请书
2014/10/29 职场文书
道德模范事迹材料
2014/12/20 职场文书
2016年清明节寄语
2015/12/04 职场文书
商业计划书如何写?关键问题有哪些?
2019/07/11 职场文书
导游词之京东大峡谷旅游区
2019/10/29 职场文书
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL